2011-01-24 24 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

答えて

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