PHP:递归保持变量的值?

时间:2010-06-16 12:41:44

标签: php recursion

我有一个函数(下面),它在我的mysql抽象类中使用,并在“tableName.fieldName”等字段中转换表名,并用指定的变量替换它们(它对连接很有用)。字段数组非常复杂,因此我需要它来支持递归,以便它可以更改array(array(array("tableName.fieldName")))中的表名,还可以更改标准array("tableName.fieldName","tableName.field2Name",...)

然而,在调试之后,我发现变量$i$fields_arr保持相同的值,即使我为$fields_arr$i传递了新值设置在循环的开头。我如何才能完成这项工作,以便$i$fields_arr获取我为其传递的新值?

/**
     * @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;
    }

1 个答案:

答案 0 :(得分:0)

不能对关联数组使用整数索引=)