你能告诉我如何从数组中删除一个元素吗?你认为这个方法好用吗?
那要看情况而定:
$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()
。
常见的方法:
根据手册所述
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 - 从数组中删除选定的项目
这要看情况。如果想要移除一个元素而不影响索引的顺序,需要使用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
unset()
方法可以删除值而无需考虑更改键 - 如果完成后,您可以通过将数组传递给array_values()
来规范化索引。这比多次使用array_splice()
更加简洁和快速。 - Stefan Gehrig