J'ai une fonction (ci-dessous) qui est utilisée dans ma classe d'abstraction mysql et convertit les noms de tables dans des champs comme "tableName.fieldName" et les remplace par les variables spécifiées (utile pour les jointures). le tableau des champs est très hétérogène, et donc je besoin pour soutenir récursivité afin qu'il puisse changer les noms de table dans un array(array(array("tableName.fieldName")))
mais aussi pour la norme array("tableName.fieldName","tableName.field2Name",...)
PHP: la récursivité conserve les valeurs pour les variables?
cependant, après mise au point, je vois que les variables $i
et $fields_arr
maintiennent les mêmes valeurs, même si je transmets une nouvelle valeur pour $fields_arr
et que $i
est défini au début de la boucle. comment puis-je faire ce travail afin que $i
et $fields_arr
prendre les nouvelles valeurs que je passe pour eux?
/**
* @param mixed $fields_arr standard array ("table.field1","table.field2",...)
* @param mixed $tables_and_vars eg. ("table1" => "tableVar1", "table2" => "tableVar2", ...)
* replaces all tablenames with desired tablevarnames
*/
private function tablesToTableVars($fields_arr, $tables_and_vars) {
// loop through every string
$numFields = count($fields_arr);
for($i = 0; $i < $numFields; $i++) {
$field = $fields_arr[$i];
if(is_numeric($field)) continue; // don't replace numbers
if(is_array($field)) {
$fields_arr[$i] = $this->tablesToTableVars($field, $tables_and_vars); // *** RECURSION ***
} else {
$tableNameLen = strpos($field, "."); // pos of period in string
if(strpos($field, ".") === false) continue; // don't replace fields that dont have tablenames
$searchTableName = substr($field, 0, $tableNameLen); // take 'table' from 'table.field'
// see if field contains a table
foreach($tables_and_vars as $tableName => $tableVar) {
if($searchTableName === $tableName) { // if it is the table name we're looking for
$fields_arr[$i] = $tableVar . substr($field, $tableNameLen); // change it to the variable name
break;
}
}
}
}
return $fields_arr;
}
Comment savez-vous que $ numFields et je continue $ les valeurs? Je ne vois rien de mal – dbemerlin
Je recevais 'Undefined offset: 0', mais je viens de réaliser que mon tableau est associatif, donc cela a du sens. Merci! haha – gsquare567
Si vous l'avez compris, veuillez noter que la question a été répondue. Merci, – David