引言

我们对于 PHP 的数组操作乐此不疲,为什么?因为 PHP 编程你几乎时时刻刻都在于数组打交道,对于数组的操作熟练程度,很大一部分因素关系着代码的优劣。

今天我们来说说,如何获取数组的最后一个元素,并且不删除它。

不要小看这个需求,没准儿你还做不对呢 :)

学习时间

如果你首先想到了 array_pop,那很不幸,这个函数可以获取最后一个元素,却把数组更改了。

array_pop 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。如果 array 为空(或者不是数组)将返回 NULL。 此外如果被调用不是一个数则会产生一个 Warning。

这显然不是我们要的结果。

其实实现一个需求的方法是多种多样的,我们尝试使用 10 种不同的办法,来做到这一点。

$x = array_values(array_slice($array, -1))[0]

第一种,使用 array_slice 截取数组 $array 倒数第一个元素。返回的是一个数组。然后使用 array_values 重新编排索引值。因为数组只有一个元素,那么索引值必然是 0。原数组 $array 毫发无损。

$x = array_slice($array, -1)[0];

第二种方法没有考虑关联数组的情况,有可能索引 0 不存在。所以容错性不好。

$x = array_pop((array_slice($array, -1)));

第三种方法,终于用到了 array_pop。不过是在 array_slice 阶段的数组上使用。

$x = array_pop((array_slice($array, -1, 1)));

第四种方法,简直是有魔性了,比第三种办法相比,只是在 array_slice 截断的长度手动指定为 1。

$x = end($array); reset($array);

第五种方法,用到数组指针了。end 返回最后一个元素。然后需要手动恢复指针位置到头部,所以调用了一次 reset 函数。本方法有可能返回关联数组,而不能拿到值。

$x = end((array_values($array)));

第六种方法,严格地为了返回最后一个元素的值,使用 array_values 进行了索引重新编排。

$x = $array[count($array)-1];

第七种方法,直接使用索引了。肯定是假设数组都是默认递增索引的数组,所以 count 获取的长度才有效。该方法容错性差。

$keys = array_keys($array); $x = $array[$keys[count($keys)-1]];

第八种方法,是对第七种的不足的修复。

$x = $array[] = array_pop($array);

第九种方法,我们需要明白,使用连等复制,array_pop 弹出数组的最后一个元素后,同时赋值给 $x。这没问题。赋值给原数组 $array[],这会对关联数组重新排定索引,所以有副作用。

$x = $array[array_key_last($array)];

第十种,这种方法的容错性也极高,因为使用了 array_key_last,有效地考虑了关联数组的情况,而且结果也很取巧。这个方法很棒。但是只有 PHP 7.3 以上的版本才有。

写在最后

好了,大家好好消化一下上面10个方法的优劣,取长补短,深度学习吧。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

接口怎么获取数组底下的数组_3分钟短文 | PHP数组获取最后一个元素,10个方式中哪个有错?...相关推荐

  1. 移除数组第一个元素_3分钟短文 | PHP 数组删除元素,忘了foreach吧,有更优雅的方式...

    引言 PHP的数组,说白了就是一个映射的键值对集合.那么如何从数组元素中删除元素呢?你肯定首先想到遍历数组,然后找到目标项,然后删除. 我看到有同学将要删除的元素 = null,这并不起作用,因为 n ...

  2. input位置_3分钟短文 | PHP 数组任意位置插入新元素,你是怎么处理的?

    引言 接着我们这个系列的文章说.本文我们聊一聊 PHP 数组,如何在任意位置插入新元素.因为内置函数并没有提供类似 array_insert(&$array, $pos, $items) 的函 ...

  3. php 二维数组根据键值合并二维数组_3分钟短文 | PHP 根据值移除数组元素,哪个方法最简单?...

    引言 PHP 数组操作,之前我们讲了如何根据值,进行多维数组的排序.今天说一说,如何根据值,进行数组元素的删除. 学习时间 假设有一个一维数组,单纯的数字数组.为了简化问题,我们假设数组元素没有重复项 ...

  4. php如何去除数组的最后一个元素,如何从PHP中的数组中删除最后一个元素?

    要从数组中删除最后一个元素或值, 请使用array_pop()函数.此函数返回数组中最后一个删除的元素, 如果数组为空或不是数组, 则返回NULL.从数组中删除最后一个元素后, 将修改数组, 并且仅当 ...

  5. 语句作用_3分钟短文:Laravel模型作用域,为你“节省”更多代码

    引言 原则上代码写一次,处处是引用,不需要大量的冗余代码,这是一种趋势,也是提高代码健壮性的努力方向. laravel模型为我们提供了一层数据库操作层,将数据交互独立出来. 但是久而久之,随着项目的需 ...

  6. laravel blade include使用变量_3分钟短文:可能是Laravel模板最直白的用法了,没有之一...

    引言 上一期我们通过分配路由地址,在url中接收位置参数并传递给控制器方法, 并且在控制器内简单地打印输出接收的参数. 本期我们尝试着使用laravel的模板功能,把控制器内组装好的数据渲染到视图模板 ...

  7. python列表获取最后一个元素的方法_Python中如何获取 list/OrderedDict 的 第一个/最后一个 元素...

    本文最后更新于2016年5月14日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢! =Start= 缘由: 最近在工作中有接触到用Python的xmltodict模块进行XML的解析, ...

  8. laravel $request 多维数组取值_3分钟短文:Laravel的“南天门”,过滤掉七七八八的数据...

    引言 上一章我们教会大家如何从用户表单内正确地获取数据,可是没有讲,获取到的数据到底有啥用,或者说,有的用户提交的数据压根儿就没正经填,那些错乱无效的数据,如果直接放到数据库,纯粹是对数据库的污染. ...

  9. laravel $request 多维数组取值_3分钟短文 | Laravel 内3种数据校验的写法,你喜欢哪一个?...

    引言 web应用程序公开访问几乎没有不带用户交互的,难免要接收用户输入的奇奇怪怪的东西.对于后端程序,必须对输入的内容进行有效性过滤. 这就是本文的重点,说一说laravel中输入请求的校验. 学习时 ...

最新文章

  1. RxJava使用(二)filter 操作符
  2. 三维比例变换学习(WPF演示)
  3. php数字导出excel表格中_php怎么把数据表中的数据导出到excel表中
  4. kafka配置公网IP访问
  5. 如何基于asp.net core的Identity框架在mysql上作身份验证处理
  6. org.dom4j.DocumentException: null Nested exception: null解决方法
  7. OSGI(面向Java的动态模型系统)和它的实现Equinox
  8. 错误: 句法分析器6行里不能有多字节字符_字节跳动iOS客户端面经第一期
  9. 移动端页面开发资源总结
  10. 素数猜想对 c语言,1007 素数对猜想 (20 分)(C语言实现)
  11. 基于51单片机的keli安装方法
  12. 985翻译硕士都在找的这款软件
  13. 母亲节海报太暖心,速来围观打卡吧~
  14. 【安卓开发】开源Notepad记事本APP项目(完整代码+说明文档)
  15. 芯片供应商:芯片一级供应商分类和安全芯片库存
  16. 2020张宇1000题【好题收集】【第四章:多元函数微分学】【第五章:二重积分】
  17. 最全的厚黑学…教你怎样混社会
  18. web攻防之跨站脚本攻击漏洞
  19. 关于linux下的.a文件与 .so 文件
  20. 自学编程的妙方法,直接省了几万块钱报班,不收藏就可惜了!

热门文章

  1. labelme批量转换json
  2. [python + debug] set()操作对象的元素为字符串,则结果随机排序,使用sorted()函数以固定顺序
  3. Servlet CDI Example Analysis
  4. plus.webview.create( url, id, styles, extras )参数及说明
  5. [转载]心灵丨愿你早一点发现,你才是自己最重要的粉丝
  6. [转]MFC中ON_COMMAND, ON_MESSAGE, ON_NOTIFY它们的区别
  7. ADO.NET2.0 Querying Large Result Sets Asynchronously(ADO.NET 异步操作)
  8. Array类filter方法实例--查找功能.
  9. [转载] 把数据对象转成字符串_python入门基础培训教程,Python 字符串学习
  10. [转载] python中三角函数_Python中的三角函数