【问题标题】:How to remove a specific key from a multidimensional array [duplicate]如何从多维数组中删除特定键[重复]
【发布时间】:2019-02-05 18:50:05
【问题描述】:

我想从所有内部数组中删除特定的数组键。我知道有一个名为unset() 的函数,它使用索引或对象名称将其分割出来。但我无法在下面的代码中实现。

[answers] => Array
            (
                [0] => Array
                    (
                        [title] => First Answer 1
                        [image] => 
                        [isCorrect] => 1
                    )

                [1] => Array
                    (
                        [title] => Second Answer
                        [image] => 
                        [isCorrect] => 0
                    )

                [2] => Array
                    (
                        [title] => Third Answer
                        [image] => 
                        [isCorrect] => 0
                    )

                [3] => Array
                    (
                        [title] => Fourth Answer
                        [image] => 
                        [isCorrect] => 0
                    )

            )

如何从 [answers] 中的每个数组中删除 [image]?

【问题讨论】:

  • 是的,这是可能的。只需遍历数组并在循环中使用unset()。如果你不能让它工作,你应该尝试并回来。请记住,然后您需要向我们展示您尝试了什么以及遇到了什么问题。
  • 向我们展示您已经尝试过的内容!
  • @topper1309,我根据您展示的示例数组稍微调整了您问题中的术语。数组中的项目是数组,我认为将它们称为对象可能会产生误导。如果你确实有一个对象数组,你应该编辑你的问题来显示它。

标签: php arrays unset


【解决方案1】:

此代码通过查找数组中的值并删除该值来工作。

foreach($answers as $key => $answer) {
  unset($answers[$key]['image']);
}

请注意这里的 $answer 变量,它只是 foreach 循环中数组元素的临时副本...

【讨论】:

  • 做或不做,没有“尝试”。 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
  • Ty Jay,我会在接下来的回答中记住这一点!
  • 您应该编辑以“试试这个”开头的任何答案。
  • 完成!现在好了吗?
【解决方案2】:

unset 确实没有理由不工作(假设这就是您所说的“我无法在我的情况下实施”),除非您这样做:

foreach ($array['answers'] as $answer) {
     unset($answer['image'];
}

它不能那样工作,因为你那里的$answer 没有引用原始数组。它是项的副本,因为 foreach 循环会在执行过程中复制数组中的每个值。

您需要获取外部数组的键并在未设置的表达式中使用它。

foreach ($array['answers'] as $key => $answer) {
     unset($array['answers'][$key]['image'];
}

【讨论】:

    【解决方案3】:

    您可以只使用未设置 例如:如果你想删除索引 1,用第二个答案,你可以这样做

    unset($answers[1]);
    

    【讨论】:

    • 这不是 OP 要求的。 OP 想要从所有子数组中删除 image。这只会删除索引 1 上的完整数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    相关资源
    最近更新 更多