2015-08-20 4 views
1

Я хочу, чтобы сократить количество кода в моем PHP-файла с помощью функции, которая создает массивы, однако содержимое массива должны быть ссылки на другие компоненты массива ... поэтому, этот код работает в одиночку:Функционально создавать ассоциативные массивы?

$array['sql'] = "SQL Statement"; 
$array['result'] = $db -> query($array['sql']); 
$array['single'] = $array['result'] -> fetch_assoc(); 

Я понимаю, что это довольно сложно, но тогда у меня была идея, чтобы сделать это:

$array = array(array('db_sql1', "SQL Statement 1"), array('db_sql2', "SQL Statement 2")); 
foreach ($array as $items) { 
    $$items[0]['sql'] = $items[1]; 
    $$items[0]['result'] = $db -> query($$items[0]['sql']); 
    $$items[0]['single'] = $$items[0]['result'] -> fetch_assoc(); 
} 

но это не работает, потому что (я считаю, по крайней мере), то [ «SQL»] используется для того, чтобы назовите пункты $$, а не пишите им. Как это возможно (если вообще) сделать это?

Я понимаю, если это невозможно по какой-либо причине, но я подумал, что было бы полезно попробовать.

+0

Под «функциональным» вы подразумевали, что он «работает», а не функциональный, а не императив? –

+0

Вы отвечаете на вопрос, заданный два года назад, то, что имело в виду, имеет очень малое отношение сейчас. – lsrwLuke

+0

Я не согласен, много вопросов, заданных/ответивших спустя десятилетие, по-прежнему дают значение –

ответ

0

Да, если вы используете массивы в сочетании с variable variables, вам нужно указать PHP, если указатель/ключ теперь для имени переменной или для доступа к самой переменной. Чтобы прояснить это, просто используйте {}, например.

$array = array(array('db_sql1', "SQL Statement 1"), array('db_sql2', "SQL Statement 2")); 

foreach ($array as $items) { 
    ${$items[0]}['sql'] = $items[1]; 
    ${$items[0]}['result'] = $db -> query(${$items[0]}['sql']); 
    ${$items[0]}['single'] = ${$items[0]}['result'] -> fetch_assoc(); 
} 

Примечание стороны:

С помощью фигурных скобок можно также сделать код для PHP 7 обратной совместимости, так как с PHP 5 до 7 правая-левая оценка изменится слева направо, как вы можете видеть здесь: http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling

+0

Спасибо, славно простое решение, которое я не смог найти ... невероятно. Кроме того, спасибо за отличную скорость, я должен подождать 8 минут, чтобы принять ваш ответ! – lsrwLuke

+0

@lsrwLuke Добро пожаловать. Имейте хороший день: D (BTW: обновил ответ, чтобы показать, что фигурные скобки имеют дополнительные преимущества) – Rizier123

+0

, что не работает –

Смежные вопросы