За последние 24 часа нас посетили 17578 программистов и 1281 робот. Сейчас ищут 1334 программиста ...

Не видит индекс многомерного ассоциативного массива

Тема в разделе "PHP для новичков", создана пользователем Biika, 18 сен 2017.

Метки:
  1. Biika

    Biika Новичок

    С нами с:
    18 сен 2017
    Сообщения:
    5
    Симпатии:
    0
    Имеется массив такого вида:
    Код (Text):
    1. array(34) {
    2.   [1]=>
    3.   array(5) {
    4.     ["id"]=>
    5.     int(1)
    6.     ["title"]=>
    7.     string(10) "Название 1"
    8.     ["level"]=>
    9.     int(5)
    10.     ["counter"]=>
    11.     int(3)
    12.     ["events"]=>
    13.     array(3) {
    14.       [13]=>
    15.       string(12) "Название 1.1"
    16.       [16]=>
    17.       string(12) "Название 1.2"
    18.       [20]=>
    19.       string(12) "Название 1.3"
    20.     }
    21.   }
    22.   [2]=>
    23.   array(5) {
    24.     ["id"]=>
    25.     int(2)
    26.     ["title"]=>
    27.     string(10) "Название 2"
    28.     ["level"]=>
    29.     int(2)
    30.     ["counter"]=>
    31.     int(2)
    32.     ["events"]=>
    33.     array(2) {
    34.       [3]=>
    35.       string(12) "Название 2.1"
    36.       [1]=>
    37.       string(12) "Название 2.2"
    38.     }
    39.   }
    40. ...
    41. }
    При обращении к нему в таком виде (это массив spr_sits):

    PHP:
    1. function increase_count ($id_ev,  &$spr_sits) {
    2.     foreach ($spr_sits as &$sit) {
    3.         var_dump($sit['events']);
    4.     }
    5. }
    Упорно пишет Undefined index: events
    Не могу понять в чем проблема, выводила уже массив всяко разно, есть там этот индекс и массив под ним, но не видит и все тут.
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    а var_dump($sit) что показывает? И зачем & перед $sit в цикле? Ну, то есть я-то знаю, что это, но интересно узнать, причину, по которой вы его там поставили.
     
  3. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    а если убрать '&' ?
     
  4. Biika

    Biika Новичок

    С нами с:
    18 сен 2017
    Сообщения:
    5
    Симпатии:
    0
    планирую изменять переменные прямо в цикле. var_dump($sit) показывает, что все есть, причем если выводить $sit['id'], $sit['title'] и так далее, то все выводит.
    Код (Text):
    1. array(5) { ["id"]=> int(1) ["title"]=> string(10) "Название 1" ["level"]=> int(5) ["counter"]=> int(3) ["events"]=> array(3) { [13]=> string(12) "Название 1.1" [16]=> string(12) "Название 1.2" [20]=> string(12) "Название 1.3" } }
    2. array(5) { ["id"]=> int(2) ["title"]=> string(10) "Название 2" ["level"]=> int(6) ["counter"]=> int(3) ["events"]=> array(3) { [12]=> string(12) "Название 2.1" [17]=> string(12) "Название 2.2" [20]=> string(12) "Название 2.3" } }
    3. ...
    --- Добавлено ---
    неа, не влияет никак, никакой из них
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Окей, принято, хотя лучше так не делать. Правильнее принимать входящие параметры и возвращать некий результат, не изменяя входящие данные. У тебя же логикая работы иная заложена, и это может стать проблемой. Но к проблеме текущей это не относится, да.

    Проверь, чтобы ключи были действительно одинаковыми. Может иметь место наличие символов с разными кодами, но одинаковой отрисовкой. Киррилическая и латинская "е", например. Проблема в самих ключах, не в php.
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. error_reporting ( E_ALL | E_STRICT );
    4.  
    5. $a = [
    6.     [
    7.         'id'=>1,
    8.         'title'=>'Название 1',
    9.         'level'=>5,
    10.         'counter'=>3,
    11.         'events'=>
    12.         [
    13.             'Название 1.1',
    14.             'Название 1.2',
    15.             'Название 1.3'
    16.         ]
    17.     ],
    18.     [
    19.         'id'=>2,
    20.         'title'=>'Название 2',
    21.         'level'=>2,
    22.         'counter'=>2,
    23.         'events'=>
    24.         [
    25.             'Название 2.1',
    26.             'Название 2.2'
    27.         ]
    28.     ]
    29. ];
    30.  
    31.  
    32.  
    33. function increase_count ($id_ev,  &$spr_sits) {
    34.     foreach ($spr_sits as &$sit) {
    35.         print_r($sit['events']);
    36.     }
    37. }
    38.  
    39. increase_count(1,$a);
    PHP:
    1. (
    2.     [0] => Название 1.1
    3.     [1] => Название 1.2
    4.     [2] => Название 1.3
    5. )
    6. (
    7.     [0] => Название 2.1
    8.     [1] => Название 2.2
    9. )
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    @Biika Сколько раз Notice: Undefined .... пишется?
    У вас во 2 уровне массива один из последующих циклов будет отсутствовать ключ events
     
  8. Biika

    Biika Новичок

    С нами с:
    18 сен 2017
    Сообщения:
    5
    Симпатии:
    0
    Проблема решена, оказывается не во всех уровнях был этот индекс :)