2013-04-09 2 views
0

У меня есть цикл foreach в начале моего документа, который извлекает данные из массива и устанавливает некоторые переменные, которые будут использоваться позже. Скажем, для этого примера $foo имеет 10 массивов в нем с ключами ID и Name.Передача переменных через две из тех же циклов foreach

foreach($foo as $bar) { 
    $id = $bar['id']; 
    $name = $bar['name']; 
} 

Затем, что я хотел бы сделать это, дальше в моем документе, где я на самом деле хочу, чтобы отобразить эти результаты для каждого $bar, я хотел бы сделать это.

foreach($foo as $bar) { 
    // display all ids 
    echo $id; 
    // display all names 
    echo $name; 
} 

Но я столкнулся с проблемой. При попытке отобразить идентификаторы и имена во втором цикле foreach он возвращает 10 случаев идентификатора, но идентификаторы все одинаковы, и это идентификатор из последнего массива в $foo.

10, 10, 10, 10, 10, 10, 10, 10, 10, 10 

Если я эхо вне $id и $name в первом цикле Еогеасп, я вижу, все 10 различных имен и идентификаторов.

1,2,3,4,5,6,7,8,9,10 

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

+2

Ваша первая петля просто создать два ВАР для идентификатора и имени, и перезапись значения каждой итерации –

ответ

0

Хотя для этого не требуется две петли, но предположим, что вы делаете, то ваш второй цикл должен выглядеть

foreach($foo as $bar) { 
$id = $bar['id']; 
$name = $bar['name']; 
// display all ids 
echo $id; 
// display all names 
echo $name; 
} 

В настоящее время с каждой итерации вы присваивающей новые значения вашего идентификатора и имени переменных и, следовательно, после окончания цикла вы видите последние.

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

$data=array(); 
foreach($foo as $bar) { 
    $data[]["id"] = $bar['id']; 
    $data[]["name"] = $bar['name']; 
} 

, а затем

foreach($data as $bar) { 
$id = $bar['id']; 
$name = $bar['name']; 

echo $id; 
echo $name; 
} 

Но это совершенно излишне

+0

Я думаю, что проблема в том, что он хочет создать новые переменные, но он просто перезаписывать их, ваш пример просто печатает их значения ... если я прав ... – Matija

+0

Я хотел бы установить переменные, а затем просто вызвать их позже в документе. Я пытаюсь избежать создания 5 одинаковых циклов в документе.Один цикл получит только идентификатор и имя, другой получит фотографию и подпись, а другой - сообщение и временную метку, например. – Ryan

+0

@Ryan см. Редактирование –

0

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

Первый цикл будет.

foreach ($foo as $bar) { 
    $ids[] = $bar['id']; 
    $names[] = $bar['name']; 
} 

Тогда вместо второго цикла вы можете использовать.

echo explode($ids,","); 
echo explode($names,","); 
Смежные вопросы