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

14

你能告诉我如何从数组中删除一个元素吗?你认为这个方法好用吗?

3个回答

16

那要看情况而定:

$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() 或结合使用 unset()array_values()


1
为什么你会使用 unset 结合 array_values 而不是 array_splice? - John
6
@John: 我能够想到的一个场景是,当你想从一个数组中删除多个项目时。使用 unset() 方法可以删除值而无需考虑更改键 - 如果完成后,您可以通过将数组传递给 array_values() 来规范化索引。这比多次使用 array_splice() 更加简洁和快速。 - Stefan Gehrig

10

常见的方法:

根据手册所述

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 - 从数组中删除选定的项目


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。


或者你可以调用 unset($a[2]); $a = array_values($a); - nickf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接