@nictur1817

Как в цикле foreach удалить массив из многомерного массива по ключу?

Есть массив. В нем массивы, содержащие fbo и fbs могут располагаться в разных порядках [0] или [1]:

Array (
[0] => Array (
    [product_id] => 111
    [offer_id] => AR-001
    [stocks] => Array (
        [0] => Array (
            [type] => fbo
            [present] => 0
            [reserved] => 0
            )
        [1] => Array (
            [type] => fbs
            [present] => 10
            [reserved] => 0
            )
        )
    )
[1] => Array (
    [product_id] => 222
    [offer_id] => AR-002
    [stocks] => Array (
        [0] => Array (
            [type] => fbs
            [present] => 0
            [reserved] => 0
            )
        [1] => Array (
            [type] => fbo
            [present] => 20
            [reserved] => 0
            )
        )
    )
)


В цикле foreach хочу удалить внутренние массивы, где есть fbo. Чтобы на выходе получился массив, содержащий только fbs. Вот так:

Array (
[0] => Array (
    [product_id] => 111
    [offer_id] => AR-001
    [stocks] => Array (
        [0] => Array (
            [type] => fbs
            [present] => 10
            [reserved] => 0
            )
        )
    )
[1] => Array (
    [product_id] => 222
    [offer_id] => AR-002
    [stocks] => Array (
        [0] => Array (
            [type] => fbs
            [present] => 0
            [reserved] => 0
            )
         )
    )
)


Пробую так:
foreach ($items as $k => $v) {
  if ($v['stocks']['type'] == 'fbo') {
        unset($items[$k]);
    }

Не удаляется. Уже голову сломала.

Как это можно сделать?
  • Вопрос задан
  • 227 просмотров
Решения вопроса 2
Immortal_pony
@Immortal_pony Куратор тега PHP
Если есть вероятность, что ключа stocks не будет на месте, то не забудьте добавить соответствующую проверку.
Аналогично с type

foreach ($items as $itemIndex=>$item) {
    foreach($item['stocks'] as $stockIndex=>$stock) {
        if ($stock['type'] === "fbo") {
            unset($items[$itemIndex]['stocks'][$stockIndex]);
            $items[$itemIndex]['stocks'] = array_values($items[$itemIndex]['stocks']);
        }
    }
}
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Так и сделать. Циклом обойти внешний массив и для каждого его элемента отфильтровать содержимое подмассива.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы