PHP цикл foreach, предупреждающий недопустимое смещение строки - PullRequest
0 голосов
/ 26 сентября 2018

У меня небольшая проблема с простым циклом.У меня есть такие данные:

$PRODUCT = [

'title' => 'Blouse',
'lines' => [

    'variants' => [
        [
            'price' => 112.34,
            'options' => [
                'size' => 'small',
                'color' => 'yellow',

            ]
        ],
        [
            'price' => 156.33,
            'options' => [
                'size' => 'small',
                'color' => 'blue',

            ]
        ],
    ],
  ]

Мне нужно создать новую таблицу, как это:

$options => [
        'size',
        'color'
    ]

Я пытаюсь получить только массив с ключом 'options' вмой цикл, и у меня даже есть данные, которые мне нужны, но у меня есть предупреждение:

Warning: Illegal string offset 'options'

Мой цикл выглядит так:

$options = [];

foreach ($PRODUCT['lines'] as $variant){
    foreach ($variant as $item) {
      $options[] = $item['options'];
    }
 }

Где моя ошибка?Я знаю, что 'price' не является массивом, но что в этом случае не должно быть предупреждений?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете использовать array_column.

$options = array_column($PRODUCT['lines']['variants'], 'options');
var_dump($options);

Array_column получит все элементы массива с именем 'options' и сохранит их в переменной $ options.

https://3v4l.org/bJKX4

0 голосов
/ 26 сентября 2018

Вы пропустите уровень в вашем массиве.Попробуйте это:

$options = [];

foreach ($PRODUCT['lines']['variants'] as $variant){
    foreach ($variant as $item) {
      $options[] = $item['options'];
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...