2011-01-24 6 views
3

У меня есть массив как это:PHP - Удаление записи из многомерного массива

$_SESSION['food'] = array( 

// ARRAY 1 
array(
     "name" => "apple", 
     "shape" => "round", 
     "color" => "red" 
), 

// ARRAY 2 
    array(
     "name" => "banana", 
     "shape" => "long", 
     "color" => "yellow" 
) 
); 

Я хочу искать через все ключи во всех дочерних массивах и удалить весь массив ребенка, если условие поиска не найдено.

Так, в основном:

  1. Если поиск для "длинных", весь массив 2 удаляется.
  2. Если вы ищете «яблоко», весь массив 1 удален.

Как бы это осуществить?

Спасибо!

+0

Спасибо всем. Я не мог заставить ни один из примеров работать, но в конце концов я разобрал его, назначив каждому дочернему массиву ассоциативный ключ, который упростил мне поиск субмассив, который мне нужно удалить. Благодаря! – RCWH

ответ

1

Это должен сделать трюк:

foreach ($array as $key => $value) { 
    foreach ($value as $child_value) { 
     if ($child_value == $search_term) { 
      unset($array[$key]); 
      continue 2; 
     } 
    } 
} 
0

В зависимости от того, сколько размеров у вас есть, вы можете использовать array_search.

Я не проверял следующее, но он должен работать:

$unset = array_search('apple', $_SESSION['food']); 
unset($_SESSION['food'][$unset]); 
+0

Это не сработает. Array_search выполняет поиск только первого уровня массива. – Joel

0

Здесь вы идете:

<?php 
function deleteObjWithProperty($search,$arr) 
    { 
    foreach ($arr as &$val) 
    { 
    if (array_search($search,$val)!==false) 
     { 
     unlink($val); 
     } 
    } 
    return $arr; 
    } 
?> 
0
$_SESSION['food'] = array( 

// ARRAY 1 
array(
     "name" => "apple", 
     "shape" => "round", 
     "color" => "red" 
), 

// ARRAY 2 
array(
    "name" => "banana", 
    "shape" => "long", 
    "color" => "yellow" 
) 
); 

echo '<pre>'.print_r($_SESSION['food']).'</pre>'; 

$arr_food = array(); 
$search_term = 'apple'; 

foreach($_SESSION['food'] AS $arr) { 
    if($arr['name'] == $search_term) { 
    unset($arr); 
    } 
$arr_food[] = $arr; 
} 

$_SESSION['food'] = $arr_food; 
echo '<pre>'.print_r($_SESSION['food']).'</pre>'; 
Смежные вопросы