Двойной знак доллара - назначить ключ массива => значение - PullRequest
0 голосов
/ 15 января 2012

Я хотел бы создать 3 разных массива, которые могут меняться в зависимости от того, какие поля извлекаются из некоторых таблиц mysql.

Вот мой код:

    // Gather db rows with query
    $compQuery['subCats'] = mysql_query("SELECT id,name,category FROM subcategories ORDER BY id DESC");
    $compQuery['cats'] =    mysql_query("SELECT id,name FROM categories ORDER BY id DESC");
    $compQuery['mans'] =    mysql_query("SELECT id,name,link FROM manufacturers ORDER BY id DESC");

    // Place rows into arrays
    foreach($compQuery as $name=>$query){

        $name = array();

        while($data = mysql_fetch_array($compQuery[$name])){
            foreach($data as $key=>$value){

                $$name[$key] = $value;                  

            }

        }

    }

Что бы я хотеложидаем, что это даст 3 массива: subCats, cats и man каждый с парой значений.Вместо того, чтобы находить переменную $$ name и присваивать массиву значение [$ key] = $, он берет одну букву из переменной $$ name и присваивает значение $ этой новой переменной.

ДляНапример, если $ name = 'subCats', $ key = '3' и value = 'machine tools'

Это создаст переменную $ C с использованием 3-й буквы в subCats:

$C = 'machine tools' 

Что нужно сделать, так это создать:

$subCats[3] = 'machine tools';

Теперь, очевидно, есть более простые способы создания отдельных массивов для каждого запроса, и я изменил свой код до более легкой / более простой версии.Тем не менее, мне все еще интересно, как мне назначить пару ключ-значение для переменной с двойным знаком доллара.

Любая помощь будет принята с благодарностью!У меня сейчас работает простой код, но я бы хотел, чтобы этот новый код был более динамичным и позволял выполнять больше запросов по мере необходимости без хлопот.

Спасибо!

Джош

Ответы [ 2 ]

1 голос
/ 15 января 2012

${$name}[$key]

Но я не люблю создавать «неизвестные» переменные, как в переменных, чье имя отсутствует в коде ... Что делать, если имя «key», «db»,'_GET', 'compQuery' и т. Д.?Все чертовски рвутся ...

1 голос
/ 15 января 2012

В этой строке:

$name = array();

Вы перезаписываете $name.Вы, вероятно, хотели написать $$name:

$$name = array();
...