2011-01-24 131 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>';