PHP - 从多维数组中删除条目

3

我有一个像这样的数组:

$_SESSION['food'] = array( 

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

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

我希望能够在所有子数组中搜索所有键,并在找到搜索词时删除整个子数组。

所以,基本上:

  1. 如果搜索“long”,则整个Array 2将被删除。
  2. 如果搜索“apple”,则整个Array 1将被删除。

我该如何完成这个操作?

谢谢!


谢谢大家。我无法使任何一个示例工作,但最终通过为每个子数组分配关联键来解决了问题,这让我很容易找到需要删除的子数组。谢谢! - RCWH
4个回答

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]);

这样不行。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>';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接