当我dd($test)
时,我有以下数组:
array:1 [
0 => {#81
+"1": "1"
+"2": "2"
}
]
我希望删除第二个字段和值,以便输出
array:1 [
0 => {#81
+"1": "1"
}
]
我一直在尝试使用array_splice
和unset
,但它没有得到我想删除的字段和值,我做错了什么?我该如何实现?提前谢谢。
答案 0 :(得分:1)
我发现有两种方法可以重新创建,只有一种方法在使用unset
时有效。
方法1 - 使用(object)[];
$test = [
(object)[
"1" => "1",
"2" => "2"
];
方法2 - 使用stdClass()
:
$array = new stdClass();
$array->{"1"} = "1";
$array->{"2"} = "2";
$test = [
$array
];
此时,我尝试unset()
$test
中第一个条目的第二个关键字:{/ 1>
unset($test[0]->{"2"});
dd($test);
此dd($test);
之后的unset()
输出为:
// Approach 1
array:1 [▼
0 => {#407 ▼
+"1": "1"
+"2": "2"
}
]
// Approach 2
array:1 [▼
0 => {#407 ▼
+"2": "2"
}
]
在使用unset()
时,似乎使用stdClass()
按预期工作,但如果您像我在方法1中尝试的那样将array
转换为object
,unset()
看起来会起作用,但实际上并没有做任何事情。
我能让方法1工作的唯一方法是:
foreach($test AS $tKey => $array){
$array = (array)$array;
foreach($array AS $aKey => $value){
if($key == 2){
unset($array[$aKey]);
}
}
$test[$tKey] = (object)$array;
}
哪个有效,但似乎效率低下,因为我将已铸造的数组封装为array
,然后再返回object
。希望这能让您对这个问题有所了解。
答案 1 :(得分:1)
我不确定为什么unset不适合你,但这段代码
<?php
$var = [
0 => [
"1" => "1",
"2" => "2",
]
];
var_dump($var);
unset($var[0]["2"]);
var_dump($var);
将产生此输出:
array(1) {
[0]=>
array(2) {
[1]=>
string(1) "1"
[2]=>
string(1) "2"
}
}
array(1) {
[0]=>
array(1) {
[1]=>
string(1) "1" /// leaving only the one you needed
}
}
您可以在此处查看:https://3v4l.org/37X5s
答案 2 :(得分:-1)
我猜你在这里打印的代码格式不正确但无论如何,要从php上的关联数组中删除项目键和值,你使用php unset($var)
函数。
举个例子
$data = array("key1"=>"value1", "key2"=>"value2");
当我打电话给unset($data["key2"]);
时
$data
现在变为仅包含键1和值1.