2016-01-21 2 views
1

Я попытался удалить весь родительский массив с помощью функции 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); 
} 

ответ

2

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

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

Try:

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]); 
     } 
    } 
} 
+0

Похоже, что делает похож на мой, только один шаг - удаление вложенных '' деталей массива не весь родительский массив – JackTheKnife

+1

Это удаляемый '$ Array [$ Key]', а не ' $ item'. – Barmar

+0

Я вижу проблему, дай мне секунду. – Barmar