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

上一篇: PHP: Delete an element from an array

下一篇: How does JavaScript .prototype work?