2011-01-24 134 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. 如果搜索“apple”,整个​​数组1被删除。

我该如何做到这一点?

谢谢!

+0

谢谢大家。我无法获得任何示例,但最终我通过为每个子数组分配一个关联关键字来对其进行分类,这使得我很容易找到需要删除的子数组。谢谢! – RCWH 2011-01-24 19:12:41

回答

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 2011-01-24 18:44:05

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>';