我正在尝试从数组中删除键/值对,但它似乎不起作用。基本上,我进行了一个返回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元素和值。
从阵列中完全删除它需要做什么?
由于
答案 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
,而无需其他任何内容。