2012-05-31 3 views
-4

У меня есть следующая функция, и целью является фильтрация в дереве массива тех элементов, которые не соответствуют индексу поиска и устраняют тему. Я могу получить эту функцию для получения желаемых результатов.удалить subarray с помощью php

public function negativeKeywordsFilter($products, $negative_keywords){ 
    $nk=explode(',',$negative_keywords); 
    foreach ($products['productItems'] as $product){ 
    foreach ($product as $item){ 
     foreach ($nk as $word){ 
     if (stripos($item['name'],$word) !== false){ 
     unset($item);      
    } 

    } 
} 

} 
return $products; 
} 

Мой массив выглядит следующим образом:

array(
    'page' => '1', 
    'items' => '234', 
    'items' => array(
     'item' => array(
      0 => array(
       'name' => 'second', 
       'description' => 'some description' 
      ) 
     ) 
    ) 
) 
) 

Если имя не совпадает с описаниями, то значение должно быть отключено.

+2

Не могли бы вы также привести примеры ожидаемых входов и выходов? – Wiseguy

+2

Каков фактический вопрос? – yenta

+1

@lgt Является ли это * действительно *, как выглядит ваш массив? Дублировать ключи? В самом деле? – Sampson

ответ

2

проблема заключается в том, что вы только отключаете переменную, которая имеет копию значения, вам нужно отменить соответствующий элемент в массиве.

public function negativeKeywordsFilter($products, $negative_keywords){ 
    $nk=explode(',',$negative_keywords); 
    foreach ($products['productItems'] as $key1 => $product){ 
    foreach ($product as $key2 => $item){ 
     foreach ($nk as $word){ 
     if (stripos($item['name'],$word) !== false){ 
     unset($products['productItems'][$key1][$key2]);      
    } 

    } 
} 

} 
return $products; 
} 
+0

большое спасибо за ваше объяснение! – lgt