2015-12-21 72 views
0

我想从php数组中删除具有未设置功能的特定元素。问题是,当我var_dump数组它显示所有索引(不好),但如果我尝试var_dump特定索引PHP抛出警告(良好)。如何从非关联数组中删除元素在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的行为如何以及如何正确删除索引?如果需要则

unset($a[array_search('unset_me', $a)]); 

添加检查类似 - -

+2

'unset($ a [0]);' - 该数组有数字索引,没有元素的字符串索引为'unset_me' – Steve

回答

3

您可以array_search试试这个

if(array_search('unset_me', $a) !== false) { 
    unset($a[array_search('unset_me', $a)]); 
} 

Demo

+0

这很危险:http://codepad.viper-7.com/Kb92l7 – Steve

+1

好的,没关系!编辑是重要的 – Steve

+0

@Steve如果检查添加正确,它会一切正常。您可以检查更新。我已经提到过它。发生这种情况的原因是'array_search'将'false'和'false'视为'0'。 :) –

3

还有一个解决办法:

$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

Good1 !!不需要检查! –

+1

这比涉及'array_search'的任何事情都好。更简单,故障点更少,并且对阵列结构的破坏更小。 – ptmalcolm

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