2015-11-26 3 views
1

Я пытаюсь удалить записи из многомерного массива, если выполнены определенные критерии. Условие состоит в том, что элемент cap должен иметь только «Capped» или «Uncapped», если «Other» существует, его следует удалить из массива.Удалить записи из многомерного массива

Я попытался использовать Unset(), но не повезло. Он не нарушает код, но ничего не меняет. Выход из массива:

[0] => Array 
    (
     [name] => Club Name 
     [speed] => Annual Membership 
     [cap] => Other 
     [s_description] => Short description 
     [l_description] => Long description 
    ) 

[1] => Array 
    (
     [name] => 50\5Mbps Fibre with 250GB 
     [speed] => Residential 50/5 Capped 
     [cap] => Capped 
     [s_description] => Short description 
     [l_description] => Long description 
    ) 

[2] => Array 
    (
     [name] => FB-FP-B-V-50/5MBPS-400-24 
     [speed] => Residential 50/5 Capped 
     [cap] => Capped 
     [s_description] => Short description 
     [l_description] => Long description 
    ) 

Код для удаления «Другие»:

foreach ($product_details['cap'] as $key ->$val_test) { 
    if ($val_test == "Other") { 
     unset($product_details[$key]); 
    } 
} 

Я понимаю, что может делать что-то действительно глупое, но для чего-то, что должно быть довольно просто, кажется, на самом деле сложно!

Благодаря

ответ

1

Предполагая, что ваш основной массив хранится в переменной: $ product_details

Ваш код будет

foreach($product_details as $key => $product){ 
    if($product['cap'] == "Other"){ 
     unset($product_details[$key]); 
    } 
} 

Вы косяк перебираем '$ product_details [' шапка ']' как это часть вашего внутреннего массива. Вы должны пересечь внешний массив, а затем проверить значение внутреннего массива.

Надеюсь, это имеет смысл.

EDIT: при перечитывании вашего вопроса вы можете изменить свое утверждение if, чтобы сделать его более открытым;

if($product['cap'] != "Capped" && $product['cap'] != "Uncapped"){ 
+0

Удивительный, спасибо. Работает как шанс. WRT новый оператор IF, это был мой план. Просто хочу, чтобы сначала работала функция Unset() – PsydeStep

+0

. Рад, что это сработало для вас, пожалуйста, отметьте как принятый ответ, если это сработало для вас. – JParkinson1991

1

Мое решение

foreach ($your_array as $element) { 
    if ($element['cap'] == "Other") { 
     continue; 
    } else { 
     $newarray[] = $element; 
    } 
} 
+0

В вопросе говорится, что искатель хочет отменить исходный массив, а не создать новый. – JParkinson1991

1
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"); 
$a2=array("e"=>"red","f"=>"green","g"=>"blue"); 

$result=array_diff($a1,$a2); 

Иначе вы должны петли, как выше. Существуют и другие способы отображения.

Смежные вопросы