在数组中取消设置元素

时间:2016-08-18 13:16:16

标签: php arrays

我正在尝试从数组中删除键/值对,但它似乎不起作用。基本上,我进行了一个返回JSON的API调用。我这样做

$tempArray = json_decode($projects, true);

如果我输出$ tempArray,我会看到类似这样的内容

array:2 [
  0 => array:9 [
    "id" => 4
    "name" => "Some Project Name"
    "value" => "234"
    "user_id" => "1"
    "client_id" => "97"
    "contact" => "Jane Berry"
  ]
  1 => array:9 [
    "id" => 3
    "name" => "Another Project Name"
    "value" => "6"
    "user_id" => "1"
    "client_id" => "97"
    "contact" => "John Doe"
  ]
]

我基本上需要删除value元素,所以我这样做

unset($tempArray['value']);

如果我在取消设置后输出$ tempArray,它会显示与之前完全相同的值,其中包含value元素和值。

从阵列中完全删除它需要做什么?

由于

2 个答案:

答案 0 :(得分:1)

unset不会递归查看子数组以删除键value。只有在第一级时,才会删除名为value的密钥。在您的数组中,第一级键是:0和1。 因此,要从所有子阵列中删除value,您必须从阵列中抛出所有项目并unset它。您可以使用简单的foreach来完成此操作。

foreach($tempArray as $key => $data) { 
   unset($data['value']);
   $tempArray[$key] = $data; //Overwrite old data with new with value unset.
}

现在,您不会在子数组项中使用value键。

答案 1 :(得分:1)

根据my comment,您没有名为“value”的键,它是数组中的顶级键。如果你的数组看起来像这样:

$myArray = array(
    "value" => "My Value to delete",
    "anotherKey" => "hello world",
);

然后你可以unset($myArray['value']);,你会删除键和值。在您的情况下,您要查找的密钥嵌套在数字键[0][1]下。您可以像这样具体引用这些:

unset($tempArray[0]['value']);

但我想你想要实现的是从数组中删除任何关键字value的痕迹,在这种情况下你最好做这样的事情:

foreach($tempArray as &$nestedArray){
    unset($nestedArray['value']);
}

请注意&之前的$nestedArray符号。这意味着“按价值传递”,实际上会在一行中更新$tempArray,而无需其他任何内容。

进一步阅读: