【问题标题】:how to remove an array from a multidimensional array?如何从多维数组中删除数组?
【发布时间】:2016-11-03 20:38:43
【问题描述】:

我有一个多维的动态数组,例如:

Array
(
    [0] => Array
        (
            [key] => delete
            [label] => hi Delete
        )

    [1] => Array
        (
            [key] => edit
            [label] => hi Edit
        )

    [2] => Array
        (
            [key] => update
            [label] => hi update
        )

)

现在我想从上面的多维数组中删除下面的数组:

Array
    (
        [key] => delete
        [label] => hi Delete
    )

最后我想要一个像这样的输出:

数组 (

    [0] => Array
        (
            [key] => edit
            [label] => hi Edit
        )

    [1] => Array
        (
            [key] => update
            [label] => hi update
        )

)

为此我已经尝试过了,下面是我的代码:

<?php
  $arr1 = array(array("key" => "delete", "label" => "hi Delete"),array("key" => "edit", "label" => "hi Edit"), array("key" => "update", "label" => "hi update"));
   $diff = array_diff_assoc($arr1, array("key" => "delete", "label" => "hi Delete"));
   print_r($diff);
?>

但我在输出中得到了完整的 $arr1:

Array
(
    [0] => Array
        (
            [key] => delete
            [label] => hi Delete
        )

    [1] => Array
        (
            [key] => edit
            [label] => hi Edit
        )

    [2] => Array
        (
            [key] => update
            [label] => hi update
        )

)

我该怎么做,请帮帮我

【问题讨论】:

标签: php multidimensional-array


【解决方案1】:

array_filtercallback 一起使用

$arr1 = array_filter($arr1, function ($var) {
    return $var['key'] != 'delete';
});
print_r($arr1);

【讨论】:

  • 但是索引的顺序没有正确排列,它删除第0个索引并从第1个索引开始数组
  • OP 提到了 1,000 条记录并且似乎担心性能,使用 php 的 array_ 函数比通过集合进行交互要慢得多。
  • @BunkerBoy 然后 $arr1 = array_values($arr1);
【解决方案2】:

您应该循环遍历数组并测试您要删除的键,如下所示:(盲写,所以您需要测试它!)

<?php
foreach ($arr1 as $thisArrIndex=>$subArray)
{
    if ( $subArray['key'] == "delete" )
    {
        unset($arr1[$thisArrIndex]);
    }
}
?>

建议的编辑是在找到密钥后跳出循环。看来 OP 可能有多个这样的键(在多个子数组中),所以我选择不在这里跳出循环。

【讨论】:

  • 我不能使用循环@Stuart,有什么功能可以做到这一点吗?
  • 为什么不能使用 foreach...?
  • 您可以使用 foreach 在约 0.3 秒内循环遍历 1,000,000 条记录... -- @Saty 的答案很好,但性能是使用 foreach 的两倍.. ..
猜你喜欢
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 2014-02-13
  • 2013-11-05
  • 1970-01-01
  • 2016-01-03
相关资源
最近更新 更多