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

时间:2015-12-21 11:56:56

标签: 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]=>
  string(8) "leave_me"
  [2]=>
  string(8) "whatever
*/
var_dump($a['unset_me']); // Undefined index: unset_me

问题是为什么php表现得像这样以及如何正确删除索引?

3 个答案:

答案 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)]);
}

Demo

答案 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)来重置密钥。