#php
#php
Вопрос:
У меня есть и id, и поле name в переменной массива, как я могу отобразить их отдельно в исходном html.
foreach($iterator as $key=>$value)
Переменная $value имеет поля id и name, я хочу отобразить их по отдельности, например
<div>id here</div> <div>name here</div>
Я пробовал это
$hier = new hier;
$iterator = $hier->Pathroot($name);
try {
foreach($iterator as $key=>$value)
{
echo '<div>' . $value['id'] . '</div><div>' . $value['name'] . '</div>'
}
Я воспользовался функцией recursiveiterator, потому что я больше не использую свою старую модель sql, поэтому мне больше не нужно использовать recursiveiterator.
Var_dump
array(1) { [0]=> array(2) { ["name"]=> string(14) "Coloso" ["id"]=> string(1) "1" } }
Комментарии:
1. Итак, что вы уже пробовали?
2. В дополнение к комментарию @Oli, не могли бы вы определить
$iterator
массив? Это массив массивов или массив со значениями определенного формата?3. Переменная $value имеет поля id и name Означает ли это, что у вас многомерный массив? Я думаю, вам определенно следует прочитать php.net/manual/en/language.types.array.php
4. @OLi Я попробовал то, что описано выше, и оно выводит только первый символ поля name и идентификатор, но идентификатор, который приходит, я предполагаю, повторяется с последнего div. это означает, что только поле name повторяет имя и значение id ….. я получаю <div>’.$value[‘id’].'</div> он все равно вернет первый символ поля name и идентификатор.
5. @thomas и @felix это многомерный массив, я, вероятно, должен сослаться на $ iterator [0][‘id’] Я думаю, что это многомерный массив, подобный array (1) { [0] => array (2) { [«name»] => string(14) «Coloso» [«id»] => string (1) «1» } }
Ответ №1:
вы пробовали очевидное:
echo "<div>$key</div><div>$value</div>";
Комментарии:
1. Дракон внутри значения — это то место, где находятся два значения, которые я хочу отобразить.
Ответ №2:
Итератор содержит массив массивов, подобных этому:
array(
// counter => array(id, name)
0 => array("1", "john"),
1 => array("2", "jane")
etc...
)
В каждом цикле foreach итератор внутренне увеличивает свой счетчик, чтобы возвращался следующий подмассив, например:
foreach ($iterator as $index => $value) {
// loop 1: index=0; value=array(id=1, name=john)
// loop 2: index=1; value=array(id=2, name=jane)
// loop 3: index=2; counter > count(array) - break
}
Поэтому, если вы используете $value
, вы должны получить нужный вам результат.
Комментарии:
1. Я думаю, что это многомерный массив, подобный array (1) { [0] => array (2) { [«name»] => string(14) «Coloso» [«id»] => string (1) «1» } }
2. Я не использовал эти классы SPL (если вы можете понять php.net /~helly/php/ext / spl это может вам помочь) — но нужно ли вам обернуть RecursiveArrayIterator в recursiveiteratorлитератор? Похоже, вы можете получить то, что хотите, из ArrayIterator.
3. Также, если вы сделаете это, вы можете использовать $ key и $ value, как предложил Дагон. Что дает var_dump текущего $ key и $ value?
4. Можете ли вы объяснить, что массив дампа var выглядит как array(1) { [0] => array (2) { [«name»] => string(14) «Coloso» [«id»] => string (1) «1» } }
5. Это дамп var без функции рекурсивного итератора, я его удалил
Ответ №3:
<div><?php echo $value['id'] ?></div> <div><?php echo $value['name'] ?></div>
Комментарии:
1. это многомерный массив, я предполагаю, что это var_dump, я думаю, что это многомерный массив, такой как array (1) { [0] => array (2) { [«name»] => string(14) «Coloso» [«id»] => string (1) «1» } }
2. @fello: Конечно, но
$value
это уже переменная итерации.
Ответ №4:
Вам нужно выяснить, имеете ли вы дело с ассоциативным массивом или с неассоциативным массивом.
Ассоциативный массив сопоставляет ключи со значениями. В вашем коде if $value
является ассоциативным массивом:
echo '<div>' . $value['id'] . '</div><div>' . $value['name'] . '</div>';
Сработало бы! (кстати, в вашем коде отсутствует конечная точка с запятой, но я предполагаю, что это просто ошибка вставки).
Если нет, $value
это просто неассоциативный массив, поэтому вам нужно создать другой цикл для печати значений:
foreach($iterator as $key=>$value){
foreach($value as $val){
echo '<div>'.$val.'</div>';
}
}
Ваш синтаксис предполагает, что вы имеете дело с ассоциативным массивом, но опять же; ваш код будет работать.
В качестве примечания следующие две строки кода эквивалентны (предполагая, что $value снова является ассоциативным массивом):
foreach($iterator as $key=>$value) echo $value['name'];
foreach($iterator as $value) echo $value['name'];
Комментарии:
1. foreach ($ iterator как $value) echo $value[‘name’]; эта строка сделала это, она напечатала значение обоих .. теперь это означает, что это связанный массив? Я взял значение $ key и оставил только значение $, и теперь это сработало. Спасибо
2. Если он правильно напечатал оба значения, $value является ассоциативным массивом, но значение ‘id’, похоже, находится в ключе ‘name’. В любом случае, рад, что это сработало.