如何从 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)]);
}

Demo

还有一个解决方案:

$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)重置按键。