За последние 24 часа нас посетил 17601 программист и 1723 робота. Сейчас ищут 1690 программистов ...

Cannot use assign-op operators with string offsets, заполнение многомерного массива.

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

  1. Biika

    Biika Новичок

    С нами с:
    18 сен 2017
    Сообщения:
    5
    Симпатии:
    0
    Есть фот такая функция:
    PHP:
    1.     private function hierarchy($array, $name, &$event_and_sit)
    2.     {
    3.         $i = $j = $k = $l =0;
    4.         foreach ($array as $arr) {
    5.             if ($arr['place'] == 'mine') {
    6.                 $event_and_sit[$arr['obj_id']][$name][$i]['id'] = $arr['id'];
    7.                 $event_and_sit[$arr['obj_id']][$name][$i]['title'] = $arr['title'];
    8.                 $event_and_sit[$arr['obj_id']][$name][$i]['status'] = $arr['status'];
    9.                 $event_and_sit[$arr['obj_id']][$name][$i]['date_start'] = $arr['date_start'];
    10.                 $i++;
    11.             }
    12.             if ($arr['place'] == 'face') {
    13.                 foreach ($event_and_sit as $key=>$value) {
    14.                     if (isset($value['faces'][$arr['obj_id']])) {
    15.                         $value['faces'][$arr['obj_id']][$name][$j]['id'] = $arr['id'];
    16.                         $value['faces'][$arr['obj_id']][$name][$j]['title'] = $arr['title'];
    17.                         $value['faces'][$arr['obj_id']][$name][$j]['status'] = $arr['status'];
    18.                         $value['faces'][$arr['obj_id']][$name][$j]['date_start'] = $arr['date_start'];
    19.                         $j++;
    20.                         break;
    21.                     }
    22.                 }
    23.             }
    24.             if ($arr['place'] == 'ex') {
    25.                 foreach ($event_and_sit as $key=>$value) {
    26.                     foreach ($value['faces'] as $kk=>$vv) {
    27.                         if (isset($vv['exs'][$arr['obj_id']])) {
    28.                             $vv['exs'][$arr['obj_id']][$name][$k]['id'] = $arr['id'];
    29.                             $vv['exs'][$arr['obj_id']][$name][$k]['title'] = $arr['title'];
    30.                             $vv['exs'][$arr['obj_id']][$name][$k]['status'] = $arr['status'];
    31.                             $vv['exs'][$arr['obj_id']][$name][$k]['date_start'] = $arr['date_start'];
    32.                             $k++;
    33.                             break 2;
    34.                         }
    35.                     }
    36.                 }
    37.             }
    38.             if ($arr['place'] == 'eq') {
    39.                 foreach ($event_and_sit as $key=>$value) {
    40.                     foreach ($value['faces'] as $kk=>$vv) {
    41.                         if (isset($vv['eqs'][$arr['obj_id']])) {
    42.                             $vv['eqs'][$arr['obj_id']][$name][$l]['id'] = $arr['id'];
    43.                             $vv['eqs'][$arr['obj_id']][$name][$l]['title'] = $arr['title'];
    44.                             $vv['eqs'][$arr['obj_id']][$name][$l]['status'] = $arr['status'];
    45.                             $vv['eqs'][$arr['obj_id']][$name][$l]['date_start'] = $arr['date_start'];
    46.                             $l++;
    47.                             break 2;
    48.                         }
    49.                     }
    50.                 }
    51.             }
    52.         }
    53.         return $event_and_sit;
    54.     }
    Вызов и передача параметров следующим образом:
    PHP:
    1. $event_and_sit = $this->hierarchy($fact_evs, 'events', $event_and_sit);
    2.           $event_and_sit = $this->hierarchy($fact_sts, 'situations', $event_and_sit);
    При этом массив $event_and_sit вот такого вида:
    Код (Text):
    1. array(3) {
    2.   [1]=>
    3.   array(3) {
    4.     ["id"]=>
    5.     int(1)
    6.     ["title"]=>
    7.     string(10) "Название 1"
    8.     ["faces"]=>
    9.     array(2) {
    10.       [1]=>
    11.       array(2) {
    12.         ["title"]=>
    13.         string(6) "ПЗ-6"
    14.         ["exs"]=>
    15.         array(2) {
    16.           [1]=>
    17.           string(6) "ВШ-1"
    18.           [10]=>
    19.           string(7) "ВШ-10"
    20.         }
    21.       }
    22.       [2]=>
    23.       array(3) {
    24.         ["title"]=>
    25.         string(7) "ОЗ-12"
    26.         ["exs"]=>
    27.         array(2) {
    28.           [2]=>
    29.           string(6) "ВШ-2"
    30.           [7]=>
    31.           string(6) "ВШ-7"
    32.         }
    33.         ["eqs"]=>
    34.         array(2) {
    35.           [1]=>
    36.           string(7) "СР-70"
    37.           [2]=>
    38.           string(15) "КРУВ-6 №2"
    39.         }
    40.       }
    41.     }
    42.   }
    43.   [2]=>
    44.   array(3) {
    45.     ["id"]=>
    46.     int(2)
    47.     ["title"]=>
    48.     string(10) "Название 2"
    49.     ["faces"]=>
    50.     array(2) {
    51.       [3]=>
    52.       array(2) {
    53.         ["title"]=>
    54.         string(8) "ПЗ-123"
    55.         ["exs"]=>
    56.         array(2) {
    57.           [3]=>
    58.           string(6) "ВШ-3"
    59.           [9]=>
    60.           string(6) "ВШ-9"
    61.         }
    62.       }
    63.       [4]=>
    64.       array(3) {
    65.         ["title"]=>
    66.         string(8) "ОЗ-211"
    67.         ["exs"]=>
    68.         array(1) {
    69.           [6]=>
    70.           string(6) "ВШ-6"
    71.         }
    72.         ["eqs"]=>
    73.         array(3) {
    74.           [3]=>
    75.           string(3) "Joy"
    76.           [4]=>
    77.           string(5) "Shatl"
    78.           [5]=>
    79.           string(15) "КРУВ-6 №1"
    80.         }
    81.       }
    82.     }
    83.   }
    84.   [3]=>
    85.   array(3) {
    86.     ["id"]=>
    87.     int(3)
    88.     ["title"]=>
    89.     string(10) "Название 3"
    90.     ["faces"]=>
    91.     array(2) {
    92.       [5]=>
    93.       array(2) {
    94.         ["title"]=>
    95.         string(7) "ПЗ-18"
    96.         ["exs"]=>
    97.         array(2) {
    98.           [4]=>
    99.           string(6) "ВШ-4"
    100.           [8]=>
    101.           string(6) "ВШ-8"
    102.         }
    103.       }
    104.       [6]=>
    105.       array(3) {
    106.         ["title"]=>
    107.         string(8) "ОЗ-128"
    108.         ["exs"]=>
    109.         array(1) {
    110.           [5]=>
    111.           string(6) "ВШ-5"
    112.         }
    113.         ["eqs"]=>
    114.         array(1) {
    115.           [6]=>
    116.           string(8) "2ЛТ-80"
    117.         }
    118.       }
    119.     }
    120.   }
    121. }

    Первые 2 if'а для mine и face проходит нормально, на последние ругается.
    Проблема в строчке $vv['exs'][$arr['obj_id']][$name][$k]['id'] = $arr['id']:
    Cannot use assign-op operators with string offsets
    Illegal string offset 'events'
     
  2. Biika

    Biika Новичок

    С нами с:
    18 сен 2017
    Сообщения:
    5
    Симпатии:
    0
    Разобралась. Проблема была в том, что иных ключей в массиве $event_and_sit...['faces'][$arr['obj_id']] нет. Там было записано сразу значение. Как я поняла, из-за этого возникал конфликт в виде того, что записываю я четко по ключу, но так как там хранилось сразу значение, он выдавал ошибку. Очень корявое объяснение, но как-то так. Решилось тем, что я добавила туда ключ ['title'] и тогда по ключу $name стал спокойно записывать значения.