为了账号安全,请及时绑定邮箱和手机立即绑定

从PHP数组中删除元素

从PHP数组中删除元素

PHP
海绵宝宝撒 2019-05-31 11:24:31
从PHP数组中删除元素是否有一种使用PHP从数组中删除元素的简单方法,例如foreach ($array)不再包括那个元素了?我以为把它设置为null可以做到,但显然不起作用。
查看完整描述

4 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

删除数组元素有不同的方法,其中一些对某些特定任务更有用,而另一些则更有用。

删除一个数组元素

如果只想删除一个数组元素,可以使用\unset()或者另一种选择\array_splice().

另外,如果您有这个值,并且不知道要删除可以使用的元素的键\array_search()去拿钥匙。

\unset()方法

请注意,当您使用\unset()数组键不会更改/重新索引。如果您想重新索引您可以使用的键\array_values()\unset()它将从0开始将所有键转换为数字枚举键。

电码

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    \unset($array[1]);
                //↑ Key which you want to delete?>

输出量

[
    [0] => a    [2] => c]

\array_splice()方法

如果你用\array_splice()键将自动重新编入索引,但关联键不会更改,而不是\array_values()将所有键转换为数字键。

\array_splice()需要偏移,而不是钥匙!作为第二个参数。

电码

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    \array_splice($array, 1, 1);
                        //↑ Offset which you want to delete?>

输出量

[
    [0] => a    [1] => c]

array_splice()\unset()通过引用获取数组,这意味着您不希望将这些函数的返回值分配给数组。

删除多个数组元素

如果要删除多个数组元素而不想调用\unset()\array_splice()您可以多次使用这些函数。\array_diff()\array_diff_key()取决于是否知道要删除的元素的值或键。

\array_diff()方法

如果您知道要删除的数组元素的值,则可以使用\array_diff()。和以前一样\unset()它不会更改/重新索引数组的键。

电码

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    $array = \array_diff($array, ["a", "c"]);
                               //└────────┘→ Array values which you want to delete?>

输出量

[
    [1] => b]

\array_diff_key()方法

如果您知道要删除的元素的键,则要使用\array_diff_key()。在这里,您必须确保将键作为第二个参数中的键传递,而不是作为值传递。否则,必须将数组翻转为\array_flip()。在这里,键不会更改/重新索引。

电码

<?php

    $array = [0 => "a", 1 => "b", 2 => "c"];
    $array = \array_diff_key($array, [0 => "xy", "2" => "xy"]);
                                    //↑           ↑ Array keys which you want to delete?>

输出量

[
    [1] => b]

如果你想用\unset()\array_splice()若要删除具有相同值的多个元素,请使用\array_keys()若要获取特定值的所有键,然后删除所有元素,请执行以下操作。


查看完整回答
反对 回复 2019-05-31
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

应该指出,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()如果您希望将整数键规范化,则可以使用。另一个选项是使用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)
} */


查看完整回答
反对 回复 2019-05-31
?
HUH函数

TA贡献1836条经验 获得超4个赞

 // 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_value()将很好地重新索引一个数字数组,但它将从数组中删除所有键字符串,并将它们替换为数字。如果需要保留键名(字符串),或者如果所有键都是数字的,则重新索引数组,请使用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)


查看完整回答
反对 回复 2019-05-31
?
偶然的你

TA贡献1841条经验 获得超3个赞

$key = array_search($needle, $array);if ($key !== false) {
    unset($array[$key]);}


查看完整回答
反对 回复 2019-05-31
  • 4 回答
  • 0 关注
  • 1073 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信