2010-05-27 3 views
3

Я хотел бы использовать foreach для циклического преобразования списка массивов и добавления элемента в каждый массив.php foreach как переменная

$tom = array('aa','bb','cc'); 
$sally = array('xx','yy','zz'); 

$myArrays = array('tom','sally'); 

foreach($myArrays as $arrayName) { 
    ${$arrayName}[] = 'newElement'; 
} 

Является ли использование $ {$ arrayName} [] лучшим способом для этого? Есть ли другой вариант вместо использования фигурных скобок? В настоящее время он работает, но мне просто интересно, есть ли лучшая альтернатива.

Благодаря

ответ

9

Используйте ссылки.

$myArrays = array(&$tom, &$sally); 

foreach($myArrays as &$arr) { 
    $arr[] = 'newElement'; 
} 
+0

Рекомендации не требуются. foreach ($ myArrays as $ i => $ arr) {$ myArrays [$ i] [] = "foo"; } – Adrian

+1

это все еще ссылка, хранящаяся в '$ myArrays', иначе' $ myArrays [$ i] 'будет копиями' $ tom' и '$ sally' вместо оригиналов. Технически он будет хранить оригиналы до тех пор, пока они не будут изменены, после чего php скопирует их. – Tesserex

5

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

Если вы можете изменить порядок вещей, почему бы не разложить их?

$tom = array('aa','bb','cc'); 
$sally = array('xx','yy','zz'); 

$myArrays = array(&$tom, &$sally); // store the actual arrays, not names 

// note the & for reference, this lets you modify the original array inside the loop 
foreach($myArrays as &$array) { 
    $array[] = 'newElement'; 
} 
0

Не требуется никаких фигурных скобок.

$$arrayName[] 

Исходная строка может быть ошибкой в ​​PHP?

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

+1

На самом деле, для массивов, фигурные скобки необходимы. Испытай сам. – Adrian

0

Некоторые люди будут ругать вас за использование переменных переменных. Вы могли бы сделать что-то вроде этого:

$tom = array('aa','bb','cc'); 
$sally = array('xx','yy','zz'); 

$myArrays = array(&$tom, &$sally); 

for($i=0; $i<sizeof($myArrays); ++$i) { 
    $myArrays[$i][] = 'newElement'; 
} 
+1

, используя обычный цикл for вместо foreach, кажется бесполезным сбивающим с толку. – Tesserex

0

Не пробовал, но должно работать тоже:

$tom = array('aa','bb','cc'); 
$sally = array('xx','yy','zz'); 

$myArrays = array('tom','sally'); 

foreach($myArrays as $key => $value) { 
    $$value[] = 'newElement'; 
} 
Смежные вопросы