在PHP中删除数组项的最佳方法是什么?

时间:2009-11-17 10:45:49

标签: php arrays

你能告诉我你从阵列中删除项目的方法吗?你觉得这样好吗?

3 个答案:

答案 0 :(得分:10)

常用方法:

根据manual

unset($arr[5]); // This removes the element from the array

过滤后的方式:

还有array_filter()函数来处理过滤数组

$numeric_data = array_filter($data, "is_numeric");

要获得顺序索引,您可以使用

$numeric_data = array_values($numeric_data);

<强>参考
PHP – Delete selected items from an array

答案 1 :(得分:10)

这取决于:

$a1 = array('a' => 1, 'b' => 2, 'c' => 3);
unset($a1['b']);
// array('a' => 1, 'c' => 3)

$a2 = array(1, 2, 3);
unset($a2[1]);
// array(0 => 1, 2 => 3)
// note the missing index 1

// solution 1 for numeric arrays
$a3 = array(1, 2, 3);
array_splice($a3, 1, 1);
// array(0 => 1, 1 => 3)
// index is now continous

// solution 2 for numeric arrays
$a4 = array(1, 2, 3);
unset($a4[1]);
$a4 = array_values($a4);
// array(0 => 1, 1 => 3)
// index is now continous

一般来说,unset()对于哈希表(字符串索引数组)是安全的,但如果必须依赖连续数字索引,则必须使用array_splice()或{{1}的组合}和array_values()

答案 2 :(得分:6)

这取决于。如果要在不导致索引间隙的情况下删除元素,则需要使用array_splice:

$a = array('a','b','c', 'd');
array_splice($a, 2, 1);
var_dump($a);

输出:

array(3) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "d"
}

使用unset可以工作,但这会导致非连续索引。当您使用count($ a) - 1作为上限的度量来迭代数组时,这有时会出现问题:

$a = array('a','b','c', 'd');
unset($a[2]);
var_dump($a);

输出:

array(3) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [3]=>
  string(1) "d"
}

如您所见,count现在为3,但最后一个元素的索引也是3.

因此,我的建议是对具有数字索引的数组使用array_splice,并且仅对具有非数字索引的数组(字典)使用unset。