PHP: özyineleme değişkenlerin değerlerini tutar?

0 Cevap php

benim mysql soyutlama sınıfında kullanılan ve "tableName.fieldName" gibi alanlarda tablo adlarını dönüştürür ve belirtilen değişkenlerin (bu birleştirmeler için yararlıdır) ile değiştirir bir işlev (aşağıda) var. alanları dizisi çok karıştırılır, ve bu yüzden bu tablo bir array(array(array("tableName.fieldName"))) isimleri değil, aynı zamanda standart için array("tableName.fieldName","tableName.field2Name",...) değiştirebilirsiniz böylece yineleme desteklemek gerekiyor

Ancak, hata ayıklama sonra, görüyorum ki değişkenler $i ve $fields_arr i için yeni bir değer geçmek olsa da, aynı değerleri muhafaza edilir $fields_arr ve {[ (0)]} döngünün başında ayarlanır. böylece $i ve $fields_arr i onlar için geçmek yeni değerleri almak nasıl ben bu işi yapabilir miyim?

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

0 Cevap