如何从 php 中的非关联数组中删除元素
How to remove element from non-associative array in php
我正在尝试使用未设置函数从 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 会这样以及如何正确删除索引?
您可以尝试使用 array_search
-
unset($a[array_search('unset_me', $a)]);
如果需要,然后添加检查,如 -
if(array_search('unset_me', $a) !== false) {
unset($a[array_search('unset_me', $a)]);
}
还有一个解决方案:
$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);
$arr = array('unset_me','leave_me','whatever',);
print_r($arr);
echo '<br/>';
$key = array_search('unset_me', $arr);
if($key !== false)
unset($arr[$key]);
print_r($arr);
我最近遇到了这个问题,发现这个解决方案有帮助:
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)
重置按键。
我正在尝试使用未设置函数从 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 会这样以及如何正确删除索引?
您可以尝试使用 array_search
-
unset($a[array_search('unset_me', $a)]);
如果需要,然后添加检查,如 -
if(array_search('unset_me', $a) !== false) {
unset($a[array_search('unset_me', $a)]);
}
还有一个解决方案:
$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);
$arr = array('unset_me','leave_me','whatever',);
print_r($arr);
echo '<br/>';
$key = array_search('unset_me', $arr);
if($key !== false)
unset($arr[$key]);
print_r($arr);
我最近遇到了这个问题,发现这个解决方案有帮助:
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)
重置按键。