Здравствуйте. Цель, отображение только в том случае, если результат подмассива [$a] равен 1. Код (PHP): $a='text'; foreach ($list as &$item) { for($i=1; $i<5; $i++) if ( $item[$i][$a] == 1 ) { echo $item[$i]['number']."|".$item[$i][$a]."<br>"; } Отображается пустая страница. В чём ошибка?
в массиве, подмассив ['text'] равен только 0 или 1. без цикла for, работает Код (PHP): $a='text'; foreach ($list as &$item) if ( $item[5][$a] == 1 ) { echo $item[5]['number']."|".$item[5][$a]."<br>"; } с for пустая страница
guestphp, кто вас учил так форматировать код? Вообще же ничего не понятно.... Сделайте var_export($list), и выложите сюда
php.ru Код (Text): 1 => array ( 'number' => 123456789, 'aaa' => 'Текст', 'bbb' => 'Текст', 'text' => 1, )
Если var_export такой, то почему вы пишете $item[5][$a] ? Код (PHP): $a='text'; foreach ($list as &$item) { if ( $item[$a] == 1 ) { echo $item['number']."|".$item[$a]."<br>"; } } Никто из наиболее опытных пользователей здесь так код не форматирует. Задача форматирования кода - чтоб визуально было сразу видно, какие блоки вложенные, какие нет.
для того, чтобы данные из массива отобразились, если значение подмассива $item[5][$a] = 1. Это успешно происходит. В массиве более одного элемента с разными индексами. Вам был приведен пример лишь одного из элементов. Сложности в реализации возникают при использовании: Код (PHP): $a='text'; foreach ($list as &$item) { for($i=1; $i<5; $i++) if ( $item[$i][$a] == 1 ) { echo $item[$i]['number']."|".$item[$i][$a]."<br>"; } }
Так, ещё раз. Если у вас $list это Код (Text): 1 => array ( 'number' => 123456789, 'aaa' => 'Текст', 'bbb' => 'Текст', 'text' => 1, ) , значит каждый $item в foreach Код (Text): array ( 'number' => 123456789, 'aaa' => 'Текст', 'bbb' => 'Текст', 'text' => 1, ) Где вы тут видите что-то с индексом 5? Или вы что-то не то привели в качестве var_export($list)
var_export($list) Код (Text): 1 => array ( 'number' => 123456789, 'aaa' => 'Текст', 'bbb' => 'Текст', 'text' => 1, ) 2 => array ( 'number' => 123456789, 'aaa' => 'Текст', 'bbb' => 'Текст', 'text' => 1, ) 3 => array ( 'number' => 123456789, 'aaa' => 'Текст', 'bbb' => 'Текст', 'text' => 0, ) 4 => array ( 'number' => 123456789, 'aaa' => 'Текст', 'bbb' => 'Текст', 'text' => 0, ) 5 => array ( 'number' => 123456789, 'aaa' => 'Текст', 'bbb' => 'Текст', 'text' => 1, )
Тогда при таком коде: Код (Text): foreach ($list as &$item) { в $item будет Код (Text): array ( 'number' => 123456789, 'aaa' => 'Текст', 'bbb' => 'Текст', 'text' => 1, ) и выражение $item[5] не имеет смысла, как и ваш цикл не имеет смысла. Ну логически неужели это не ясно? foreach перебирает элементы $list по одному, подставляя их в $item, каждый из которых в вашем случае - ассоциативный массив, как в листинге. Я уже до вас это донести пол дня пытаюсь. Добавлено спустя 49 секунд: Есть $list[5], а вот $item[5] внутри foreach нету! Есть $item["text"]
если в foreach нет $item[5], почему при выполнении: Код (PHP): $a='text'; foreach ($list as &$item) { if ( $item[5][$a] == 1 ) { echo $item[5]['number']."|".$item[5][$a]."<br>"; } } где указывается на то, что если в: Код (Text): 5 => array ( 'number' => 123456789, 'aaa' => 'Текст', 'bbb' => 'Текст', 'text' => 1, ) есть [$a] которое = 1, то отобразить всё содержимое ['number'] и [$a] и результат успешно ображается: Код (Text): 123456789 | 1 но в данном примере обращаемся только к [5]. Для того, чтобы обратиться к [1],[2],[3],[4],[5], используем for: Код (PHP): for($i=1; $i<5; $i++) и на этом этапе возникает сложность, а именно отображается пустая страница.
Var_export - главная отладочная команда. Чтоб что-то сделать с данными, надо знать, как эти данные выглядят. Я знаю, как работают массивы и foreach в php, поверьте. По вашему var_export у $item не может быть элемента с индексом 5.
Здравствуйте. Цель, отображение только в том случае, если результат подмассива ['text'] равен 1. Код (PHP): foreach ($list as &$item) { for($i=1; $i<5; $i++) if ( $item[$i]['text'] == 1 ) { echo $item[$i]['number']."|".$item[$i]['text']."<br>"; } } Отображается пустая страница. В чём ошибка?
Код (PHP): <?php error_reporting(E_ALL); $ar= [ 1=>['number'=>123456789, 'aaa'=>'Текст', 'bbb'=>'Текст', 'text'=>1], 2=>['number'=>123456789, 'aaa'=>'Текст', 'bbb'=>'Текст', 'text'=>1], 3=>['number'=>123456789, 'aaa'=>'Текст', 'bbb'=>'Текст', 'text'=>0], 4=>['number'=>123456789, 'aaa'=>'Текст', 'bbb'=>'Текст', 'text'=>0], 5=>['number'=>123456789, 'aaa'=>'Текст', 'bbb'=>'Текст', 'text'=>1] ] ; foreach($ar as $item){foreach($item as $item2){echo $item2.'<hr>';} } echo '<b>'.gettype($item); echo '|' . gettype($item2) . '</b>'; echo '<hr color="red"/>'; /* далее сам код; надеюсь правильно понял то, что должно быть на выходе. Предпологается что ты хочешь такой результат: 123456789 | 1 123456789 | 1 123456789 | 1 */ foreach($ar as $k=>$v) { foreach($v as $k2=>$v2) { echo $ar[$k][$k2]==1 ? $ar[$k]['number'] . ' | ' . $ar[$k]['text'] . '<hr>' : '' ; } }
INETCHIK, спасибо, итоговый результат для вывода вы поняли верно, но интересует ошибка в приведенном коде. denis01, спасибо, буду разбираться.