PHP:从数组中删除一个元素
是否有一种简单的方法可以使用PHP
从数组中删除元素,例如foreach ($array)
不再包含该元素?
我认为把它设置为null
会做到,但显然它不起作用。
有不同的方法可以删除一个数组元素,其中一些对于某些特定的任务比其他的更有用。
删除一个数组元素
如果你只想删除一个数组元素,你可以使用unset()
或者array_splice()
。
另外,如果你有这个值并且不知道删除元素的键值,你可以使用array_search()
来获得键值。
unset()
方法
请注意,使用unset()
,数组键不会更改/ reindex。 如果你想重新索引键,你可以在unset()
之后使用array_values()
,这将把所有键转换为从0开始的数字枚举键。
码
<?php
$array = array(0 => "a", 1 => "b", 2 => "c");
unset($array[1]);
//↑ Key which you want to delete
?>
产量
Array (
[0] => a
[2] => c
)
array_splice()
方法
如果使用array_splice()
则键将自动重新编制索引,但关联键不会与array_values()
相反,这会将所有键转换为数字键。
另外array_splice()
需要偏移量,而不是密钥!作为第二个参数。
码
<?php
$array = array(0 => "a", 1 => "b", 2 => "c");
array_splice($array, 1, 1);
//↑ Offset which you want to delete
?>
产量
Array (
[0] => a
[1] => c
)
与unset()
array_splice()
相同的array_splice()
通过引用获取数组,这意味着您不想将这些函数的返回值分配回数组。
删除多个数组元素
如果你想删除多个数组元素,并且不想多次调用unset()
或array_splice()
,你可以使用函数array_diff()
或array_diff_key()
这取决于你是否知道元素的值或者键你想删除。
array_diff()
方法
如果您知道要删除的数组元素的值,则可以使用array_diff()
。 与之前一样,使用unset()
它不会更改/重新索引数组的键。
码
<?php
$array = array(0 => "a", 1 => "b", 2 => "c");
$array = array_diff($array, ["a", "c"]);
//└────────┘→ Array values which you want to delete
?>
产量
Array (
[1] => b
)
array_diff_key()
方法
如果您知道要删除的元素的键,那么您想使用array_diff_key()
。 在这里你必须确保你在第二个参数中传递键作为键,而不是作为值。 否则,你必须用array_flip()
翻转数组。 而且这里的钥匙不会改变/ reindex。
码
<?php
$array = array(0 => "a", 1 => "b", 2 => "c");
$array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
//↑ ↑ Array keys which you want to delete
?>
产量
Array (
[1] => b
)
此外,如果您想使用unset()
或array_splice()
删除具有相同值的多个元素,则可以使用array_keys()
获取特定值的所有键,然后删除所有元素。
应该注意的是, unset()
会保持索引不变,这正是你使用字符串索引(数组作为散列表)时所期望的,但在处理整数索引数组时可能会令人惊讶:
$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[3]=>
int(3)
} */
$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)
} */
所以,如果你想规范你的整数键, array_splice()
可以被使用。 另一种选择是在unset()
之后使用array_values()
unset()
:
$array = array(0, 1, 2, 3);
unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(3)
} */
// our initial array
$arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");
print_r($arr);
// remove the elements who's values are yellow or red
$arr = array_diff($arr, array("yellow", "red"));
print_r($arr);
这是上面代码的输出:
Array
(
[0] => blue
[1] => green
[2] => red
[3] => yellow
[4] => green
[5] => orange
[6] => yellow
[7] => indigo
[8] => red
)
Array
(
[0] => blue
[1] => green
[4] => green
[5] => orange
[7] => indigo
)
现在,array_values()将很好地重新索引一个数值数组,但会从数组中删除所有的键字符串并将其替换为数字。 如果您需要保留键名(字符串),或者如果所有键均为数字,则重新索引数组,请使用array_merge():
$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);
输出
Array
(
[0] => blue
[1] => green
[2] => green
[3] => orange
[4] => indigo
)
链接地址: http://www.djcxy.com/p/787.html