我正在尝试使用unset函数从php数组中删除特定元素。问题是,当我在var_dump数组中它显示所有索引(不好)但是如果我尝试var_dump特定索引PHP抛出警告(好)。
$a = [
'unset_me',
'leave_me',
'whatever',
];
unset($a['unset_me']);
var_dump($a);
/**
array(3) {
[0]=>
string(8) "unset_me"
[1]=>
string(8) "leave_me"
[2]=>
string(8) "whatever
*/
var_dump($a['unset_me']); // Undefined index: unset_me
问题是为什么php表现得像这样以及如何正确删除索引?
答案 0 :(得分:4)
还有一个解决方案:
$arr = array('unset_me','leave_me','whatever',);
print_r($arr);
// remove the elements that you want
$arr = array_diff($arr, array("unset_me"));
print_r($arr);
答案 1 :(得分:3)
您可以使用array_search
-
unset($a[array_search('unset_me', $a)]);
如果需要,请添加支票,如 -
if(array_search('unset_me', $a) !== false) {
unset($a[array_search('unset_me', $a)]);
}
答案 2 :(得分:0)
我最近遇到了这个问题,发现此解决方案有所帮助:
unset($a[array_flip($a)['unset_me']]);
仅说明此处发生的情况:
array_flip($a)
切换键的项目。它将变成:
$a = [
'unset_me' => 0,
'leave_me' => 1,
'whatever' => 2,
];
array_flip($a)['unset_me']
因此解析为0。因此该表达式将放入原始$a
中,然后可以将其取消设置。
此处有2个警告:
这仅适用于基本数组,如果您具有对象或数组,则需要选择其他解决方案之一
您删除的键将从数组中丢失,因此在这种情况下,0
处将没有任何项,并且数组将从1
开始。如果对您来说很重要,则可以执行array_values($a)
来重置密钥。