За последние 24 часа нас посетили 16703 программиста и 1621 робот. Сейчас ищут 867 программистов ...

Вывод данных из массива

Тема в разделе "PHP для новичков", создана пользователем guestphp, 17 апр 2015.

  1. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    Здравствуйте.

    Цель, отображение только в том случае, если результат подмассива [$a] равен 1.

    Код (PHP):
    1. $a='text';
    2.  
    3. foreach ($list as &$item)
    4.     {
    5. for($i=1; $i<5; $i++) 
    6.  
    7. if ( $item[$i][$a] == 1 )
    8. {
    9. echo $item[$i]['number']."|".$item[$i][$a]."<br>"; 
    10.     }
    Отображается пустая страница. В чём ошибка?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    а ты не попутал if $item[$i][$a] с if $item[$i]['number'] ?
     
  3. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    в массиве, подмассив ['text'] равен только 0 или 1.

    без цикла for, работает
    Код (PHP):
    1. $a='text';
    2.  
    3. foreach ($list as &$item)
    4.  
    5. if ( $item[5][$a] == 1 )
    6.     {
    7. echo $item[5]['number']."|".$item[5][$a]."<br>"; 
    8.     } 
    с for пустая страница
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    guestphp, кто вас учил так форматировать код? Вообще же ничего не понятно.... Сделайте var_export($list), и выложите сюда
     
  5. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    php.ru

    Код (Text):
    1.  1 =>
    2.     array (
    3.       'number' => 123456789,
    4.       'aaa' => 'Текст',
    5.       'bbb' => 'Текст',
    6.       'text' => 1,
    7.     )
     
  6. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Если var_export такой, то почему вы пишете $item[5][$a] ?

    Код (PHP):
    1. $a='text';
    2. foreach ($list as &$item) {
    3.     if ( $item[$a] == 1 ) {
    4.          echo $item['number']."|".$item[$a]."<br>";
    5.     }
    6. }
    7.  
    Никто из наиболее опытных пользователей здесь так код не форматирует. Задача форматирования кода - чтоб визуально было сразу видно, какие блоки вложенные, какие нет.
     
  8. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    для того, чтобы данные из массива отобразились, если значение подмассива $item[5][$a] = 1. Это успешно происходит. В массиве более одного элемента с разными индексами. Вам был приведен пример лишь одного из элементов.

    Сложности в реализации возникают при использовании:

    Код (PHP):
    1. $a='text';
    2. foreach ($list as &$item) {
    3.     for($i=1; $i<5; $i++) 
    4.         if ( $item[$i][$a] == 1 ) {
    5.             echo $item[$i]['number']."|".$item[$i][$a]."<br>"; 
    6.         }
    7. }
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Так, ещё раз. Если у вас $list это
    Код (Text):
    1.  1 =>
    2.     array (
    3.       'number' => 123456789,
    4.       'aaa' => 'Текст',
    5.       'bbb' => 'Текст',
    6.       'text' => 1,
    7.     )
    , значит каждый $item в foreach
    Код (Text):
    1.  
    2.  array (
    3.       'number' => 123456789,
    4.       'aaa' => 'Текст',
    5.       'bbb' => 'Текст',
    6.       'text' => 1,
    7.     )
    Где вы тут видите что-то с индексом 5? Или вы что-то не то привели в качестве var_export($list)
     
  10. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    var_export($list)
    Код (Text):
    1.  1 =>
    2.     array (
    3.       'number' => 123456789,
    4.       'aaa' => 'Текст',
    5.       'bbb' => 'Текст',
    6.       'text' => 1,
    7.     )
    8.  
    9.  2 =>
    10.     array (
    11.       'number' => 123456789,
    12.       'aaa' => 'Текст',
    13.       'bbb' => 'Текст',
    14.       'text' => 1,
    15.     )
    16.  
    17.  3 =>
    18.     array (
    19.       'number' => 123456789,
    20.       'aaa' => 'Текст',
    21.       'bbb' => 'Текст',
    22.       'text' => 0,
    23.     )
    24.  
    25.  4 =>
    26.     array (
    27.       'number' => 123456789,
    28.       'aaa' => 'Текст',
    29.       'bbb' => 'Текст',
    30.       'text' => 0,
    31.     )
    32.  
    33.  5 =>
    34.     array (
    35.       'number' => 123456789,
    36.       'aaa' => 'Текст',
    37.       'bbb' => 'Текст',
    38.       'text' => 1,
    39.     )
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Это что, var_export($list) или var_export($item) ?
     
  12. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Тогда при таком коде:
    Код (Text):
    1.  
    2. foreach ($list as &$item) {
    в $item будет
    Код (Text):
    1.  
    2. array (
    3.       'number' => 123456789,
    4.       'aaa' => 'Текст',
    5.       'bbb' => 'Текст',
    6.       'text' => 1,
    7.     )
    и выражение $item[5] не имеет смысла, как и ваш цикл не имеет смысла. Ну логически неужели это не ясно? foreach перебирает элементы $list по одному, подставляя их в $item, каждый из которых в вашем случае - ассоциативный массив, как в листинге. Я уже до вас это донести пол дня пытаюсь.

    Добавлено спустя 49 секунд:
    Есть $list[5], а вот $item[5] внутри foreach нету! Есть $item["text"]
     
  14. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    если в foreach нет $item[5], почему при выполнении:
    Код (PHP):
    1. $a='text';
    2.  
    3. foreach ($list as &$item) {
    4.     if ( $item[5][$a] == 1 ) {
    5.         echo $item[5]['number']."|".$item[5][$a]."<br>"; 
    6.     } 
    7. } 
    где указывается на то, что если в:
    Код (Text):
    1.  
    2. 5 =>
    3.     array (
    4.       'number' => 123456789,
    5.       'aaa' => 'Текст',
    6.       'bbb' => 'Текст',
    7.       'text' => 1,
    8.     )
    есть [$a] которое = 1, то отобразить всё содержимое ['number'] и [$a] и результат успешно ображается:
    Код (Text):
    1. 123456789 | 1
    но в данном примере обращаемся только к [5]. Для того, чтобы обратиться к [1],[2],[3],[4],[5], используем for:
    Код (PHP):
    1. for($i=1; $i<5; $i++) 
    и на этом этапе возникает сложность, а именно отображается пустая страница.
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Значит, вы не тот var_export мне приводите.
     
  16. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Var_export - главная отладочная команда. Чтоб что-то сделать с данными, надо знать, как эти данные выглядят. Я знаю, как работают массивы и foreach в php, поверьте. По вашему var_export у $item не может быть элемента с индексом 5.
     
  18. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    Здравствуйте.

    Цель, отображение только в том случае, если результат подмассива ['text'] равен 1.

    Код (PHP):
    1. foreach ($list as &$item) {
    2.     for($i=1; $i<5; $i++) 
    3.         if ( $item[$i]['text'] == 1 ) {
    4.             echo $item[$i]['number']."|".$item[$i]['text']."<br>"; 
    5.         }
    6. }
    Отображается пустая страница. В чём ошибка?
     
  19. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  20. INETCHIK

    INETCHIK Активный пользователь

    С нами с:
    13 фев 2014
    Сообщения:
    35
    Симпатии:
    0
    Код (PHP):
    1. <?php error_reporting(E_ALL);
    2. $ar=
    3. [
    4. 1=>['number'=>123456789, 'aaa'=>'Текст', 'bbb'=>'Текст', 'text'=>1],
    5. 2=>['number'=>123456789, 'aaa'=>'Текст', 'bbb'=>'Текст', 'text'=>1],
    6. 3=>['number'=>123456789, 'aaa'=>'Текст', 'bbb'=>'Текст', 'text'=>0],
    7. 4=>['number'=>123456789, 'aaa'=>'Текст', 'bbb'=>'Текст', 'text'=>0],
    8. 5=>['number'=>123456789, 'aaa'=>'Текст', 'bbb'=>'Текст', 'text'=>1]
    9. ] ;
    10. foreach($ar as $item){foreach($item as $item2){echo $item2.'<hr>';} }
    11. echo '<b>'.gettype($item);
    12. echo '|' . gettype($item2) . '</b>';
    13. echo '<hr color="red"/>';
    14. /* далее сам код; надеюсь правильно понял то,  что должно быть на выходе.
    15. Предпологается что ты хочешь такой результат:
    16. 123456789 | 1
    17. 123456789 | 1
    18. 123456789 | 1
    19. */
    20.  
    21. foreach($ar as $k=>$v)
    22. {
    23. foreach($v as $k2=>$v2)
    24. {
    25. echo $ar[$k][$k2]==1 ? $ar[$k]['number'] . ' | ' . $ar[$k]['text'] . '<hr>' : '' ;
    26. }
    27. }
     
  21. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    INETCHIK, спасибо, итоговый результат для вывода вы поняли верно, но интересует ошибка в приведенном коде.

    denis01, спасибо, буду разбираться.
     
  22. guestphp

    guestphp Новичок

    С нами с:
    11 апр 2015
    Сообщения:
    86
    Симпатии:
    0
    Решено. В строке:

    Код (PHP):
    1. foreach ($list as &$item) {
    следует убрать символ "&".