加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_池州站长网 (https://www.0566zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

3分钟短文 | PHP 数组删除元素,忘了foreach吧,有更优雅的方式

发布时间:2022-12-02 10:49:08 所属栏目:PHP教程 来源:
导读:  引言

  PHP的数组,说白了就是一个映射的键值对集合。那么如何从数组元素中删除元素呢?你肯定首先想到遍历数组,然后找到目标项,然后删除。

  我看到有同学将要删除的元素 = null,这并不起作用,
  引言
 
  PHP的数组,说白了就是一个映射的键值对集合。那么如何从数组元素中删除元素呢?你肯定首先想到遍历数组,然后找到目标项,然后删除。
 
  我看到有同学将要删除的元素 = null,这并不起作用,因为 null 也是作为值存在的。并不能移除元素。
 
  本文就专门说说移除数组元素的方法。
 
  学习时间
 
  大致上说,移除数组元素,有两个常用方法,一个是 unset 函数,一个是 array_splice 函数。
 
  array_splice 什么时间使用?就是你拿到的是值,却不知道其索引,就要用这个了。
 
  unset 函数
 
  请注意,使用 unset 函数不会重新构建索引,数组不会洗牌。如果你想要在删除元素后重新创建索引,那就执行 array_values,返回的数组就是重新编排过索引的了。并且所有索引被设置成默认从0开始的数字。
 
  举例说明:
 
  $array = [0 => "a", 1 => "b", 2 => "c"];
  unset($array[1]);
  执行该操作后,数组 $array 的值如下:
 
  [
      [0] => a
      [2] => c
  ]
  可以注意到数组索引没有变化。
 
  array_splice 函数
 
  这个函数在移除元素后,关联数组的对应关系不会改变,此函数的参数形式:
 
  array array_splice( array &$input, int $offset[, int $length = 0[, mixed $replacement]] )
  用来把数组中的一部分去掉并用其它值取代 。如果最后的参数 $replaement 不传,就是默认为把 $offset 开始的 $length 个元素删除。
 
  如果是数字索引,返回的数组会重新编排索引值:
 
  $array = [0 => "a", 1 => "b", 2 => "c"];
  array_splice($array, 1, 1);
  返回的值:
 
  [
      [0] => a
      [1] => c
  ]
  可以看到索引被重新编排了。
 
  再深一步
 
  上面说的两个示例,都是单个元素的删除。下面说说移除多个数组元素。
 
  unset / arraysplice 用起来太繁琐了,要一个一个地操作。如果我们知道了数组元素的键,或者值,则可以使用 array_diff / array_diff_key 来进行批量操作。
 
  array_diff 函数
 
  比如已知要删除的元素的值,可以像下面这样移除:
 
  $array = [0 => "a", 1 => "b", 2 => "c"];
  $array = array_diff($array, ["a", "c"]);
  结果输出:
 
  [
      [1] => b
  ]
  数组的索引并不会被重建。
 
  array_diff_keys 函数
 
  如果已知要删除元素的索引,可以通过下面这样删除:
 
  $array = [0 => "a", 1 => "b", 2 => "c"];
  $array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
  执行后输出:
 
  [
      [1] => b
  ]
  索引没有重建。
 
  写在最后
 
  本文我们通过几个示例,演示了数组移除元素的方式,不要再一个 for 循环走遍天下了。PHP 提供了许多有利于减少冗余代码的函数工具,我们应该用起来。
 
  Happy coding :_)
 

(编辑:我爱制作网_池州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!