Удалить элемент массива на основе значения из вложенного массива

Я пытаюсь удалить весь родительский массив с помощью PHP unset(key) функция, основанная на значении вложенного массива в нем.

Вложенный массив выглядит так

Array (
[0] => Array (
[ID] => 9909
[SHIPPING_AMOUNT] => 5
[TOTAL_TAX] => 0
[GRAND_AMOUNT] => 49.97
[ITEMS_AMOUNT] => 44.97
[ITEMS] => Array (
[0] => Array (
[CODE] => TEST
[QTY] => 1
[UNIT_PRICE] => 14.99 )
[1] => Array (
[CODE] => NNKIT
[QTY] => 1
[UNIT_PRICE] => 9.99 )
[2] => Array (
[CODE] => MAINKIT
[QTY] => 1
[UNIT_PRICE] => 19.99 )
)
)
[1] => Array (
[ID] => 9910
[SHIPPING_AMOUNT] => 5
[TOTAL_TAX] => 0
[GRAND_AMOUNT] => 74.96
[ITEMS_AMOUNT] => 69.96
[ITEMS] => Array (
[0] => Array (
[CODE] => NNKIT
[QTY] => 1
[UNIT_PRICE] => 9.99 )
[1] => Array (
[CODE] => MAINKIT
[QTY] => 3
[UNIT_PRICE] => 19.99 )
)
)
[2] => Array (
[ID] => 9911
[SHIPPING_AMOUNT] => 5
[TOTAL_TAX] => 0
[GRAND_AMOUNT] => 44.98
[ITEMS_AMOUNT] => 39.98
[ITEMS] => Array (
[0] => Array (
[CODE] => MAINKIT
[QTY] => 2
[UNIT_PRICE] => 19.99 )
)
)
[3] => Array (
[ID] => 9912
[SHIPPING_AMOUNT] => 5
[TOTAL_TAX] => 0
[GRAND_AMOUNT] => 29.98
[ITEMS_AMOUNT] => 24.98
[ITEMS] => Array (
[0] => Array (
[CODE] => TEST
[QTY] => 1
[UNIT_PRICE] => 14.99 )
[1] => Array (
[CODE] => NEWTEST
[QTY] => 1
[UNIT_PRICE] => 9.99 )
)
)

и значение, которое я проверяю, CODE = MAINKIT, Если не существует во вложенном массиве, то основной массив должен быть удален (в этом случае родительский массив array[3]) но как-то вернулся key из вложенного массива не родительский.

Код PHP:

foreach($array as $key => $value){
if(is_array($value) && $value['CODE'] != 'MAINKIT')
unset($key);
}

1

Решение

CODE элементы находятся внутри $value['ITEMS'] массив, а не прямо в $value,

Чтобы сказать, MAINKIT нет ни в одном из элементов, вы должны пройтись по всем элементам, проверяя, совпадает ли какой-либо из них. Если этого не делать, удалите элемент массива.

Пытаться:

foreach($array as $key => $value){
if (is_array($value) && is_array($value['ITEMS']))
$found_mainkit = false;
foreach ($value['ITEMS'] as $item) {
if($item['CODE'] == 'MAINKIT') {
$found_mainkit = true;
break;
}
}
if (!$found_mainkit) {
unset($array[$key]);
}
}
}
2

Другие решения

Других решений пока нет …