php中如何从非关联数组中删除元素

php中如何从非关联数组中删除元素,php,arrays,unset,Php,Arrays,Unset,我试图用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]=> s

我试图用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会这样做,以及如何正确删除索引?

您可以使用array\u search来尝试这一点-

如果需要,则添加如下检查-

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);  

我最近遇到了这个问题,发现这个解决方案很有帮助:

取消设置$a[array_flip$a['unset_me']

只是为了解释这里发生了什么:

array_flip$a切换密钥的项目。因此,它将成为:

$a = [
    'unset_me' => 0,
    'leave_me' => 1,
    'whatever' => 2,
];
数组\u flip$a['unset\u me']因此解析为0。因此,该表达式被放入原始$a中,然后可以取消设置

这里有两个注意事项:

这只适用于基本数组,如果有对象数组或数组,则需要选择其他解决方案之一

您删除的键将从数组中丢失,因此在本例中,0处将没有项,数组将从1开始。如果这对您很重要,您可以执行数组_值$a来重置键


未设置$a[0];-数组有数字索引,没有未设置字符串索引的元素_me@Steve如果支票加得合适,一切都会好的。您可以检查更新。我已经提过了。发生这种情况是因为返回false和false的数组_搜索被视为0:@苏加塔:你是最棒的。。。最活跃的人。这比任何涉及数组搜索的东西都好。更简单,故障点更少,对数组结构的破坏性更小。如果数组包含数组或对象,此方法将由于数组/对象到字符串的转换而导致错误。对于一般用途来说,这不是一个很好的解决方案。
$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);
$a = [
    'unset_me' => 0,
    'leave_me' => 1,
    'whatever' => 2,
];