数组函数 array_column

内容目录

array_column 函数简介传入一个参数,返回二维数组中指定列传入一个参数,指定列不一定存在的情况传入两个参数,且两个参数对应的列都存在且不重复如果第二个参数对应的列的数据有重复的情况如果对应键或者值的列数据不一定存在情况总结

array_column 函数简介

array_column() 返回input数组中键值为column_key的列, 如果指定了可选参数index_key,那么input数组中的这一列的值将作为返回数组中对应值的键。

这是php.net中对该函数的说明。说的很明白却有那么的晕。还是先看看不同情况下的输出结果吧。一下所有的实例都以相同的数组$data输入为参考,输入如下。

$data = [
 ['id'=>1,'name'=>'A','city'=>'Beijin','like'=>'Red','info'=>''],
 ['id'=>2,'name'=>'B','city'=>'Shanghai','age'=>20,'info'=>'defualt'],
 ['id'=>2,'name'=>'C','city'=>'Guangdong','age'=>'30','info'=>'empty']
];

传入一个参数,返回二维数组中指定列

$d1 = array_column($data,'id');
print_r($d1);

输出内容是:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

当输入参数只有一个参数,且指定列都存在的情况下,array_column 函数的左右是取出二维数组的这一列的数据。

传入一个参数,指定列不一定存在的情况

程序中,数据的结构不统一最容易导致bug的出现,因此需要验证在指定列数据缺失部分的情况函数的返回结果。原始数据age在第一个子数组中是不存在的。

$d2 = array_column($data,'age');
print_r($d2);

对于以上的内容输出结果如下:

Array
(
    [0] => 20
    [1] => 30
)

这中情况,会不不存该列的数据丢弃掉,返回数组的个数相比原来的数据减少了!!!因此,当传入一个参数,所指定的列不存在的情况,array_column将返回一个空数组。

传入两个参数,且两个参数对应的列都存在且不重复

$d1 = array_column($data,'id','name');
print_r($d1);

以上代码输出内容如下:

Array
(
    [A] => 1
    [B] => 2
    [C] => 3
)

输出以第二个参数对应列为键,第一个参数对应列为值的关联数组。

如果第二个参数对应的列的数据有重复的情况

$d1 = array_column($data,'id','city');
print_r($d1);

对于有重复情况的输入,输出内容如下:

Array
(
    [Beijin] => 3
    [Shanghai] => 2
)

相同键盘,保留最后一次的值。

如果对应键或者值的列数据不一定存在情况

$d1 = array_column($data,'age','name');
$d2 = array_column($data,'name','age');
print_r($d1);
print_r($d2);

以上代码输出内容如下:

Array
(
    [B] => 20
    [C] => 30
)
Array
(
    [0] => A
    [20] => B
    [30] => C
)

如果值不存在,直接丢弃该子数组数据。当键不存在的情况,则以下标为0开始填充数组。如果输入的键根本不存在,则完全跟一个参数输入的时候一样

总结

php 数组函数array_column 函数使用的作用:

  • 单个输入,返回指定列的值。如果某项数据不存在该列,则返回数据没有该项数据。如果列不存在,则返回空数组。只返回存在该列的数据项该列组成的数组。
  • 多个输入,返回以第一个参数对应列为值,第二个参数队列列数据为键的关联数组。键对应列不完整,从0开始递增填充。值列对应数据不完整,直接丢弃不完整数据。

本文分享自微信公众号 - 写PHP的老王(laowang_php)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java系列文章

一张图讲解对象锁和关键字synchronized修饰方法(代码块)

每个对象在出生的时候就有一把钥匙(监视器Monitor),那么被synchronized 修饰的方法相当于给方法加了一个锁,这个方法就可以进行同步,在多线程的时...

33710
来自专栏腾讯技术工程官方号的专栏

多图文帖智能封面提取方案

? 导语 一个帖子在用户点进去观看之前,能被用户捕捉到的信息只有封面缩略图、标题、作者等少量信息,这些因素直接决定了用户是否愿意点击该帖。一个好的封面能明显提...

21730
来自专栏Fundebug

8个有意思的JavaScript面试题

JavaScript 是一种有趣的语言,我们都喜欢它,因为它的性质。浏览器是JavaScript的主要运行的地方,两者在我们的服务中协同工作。JS有一些概念,人...

12770
来自专栏明丰随笔

浅谈.Net反射 10

在前面几篇当中,先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性,以及如何利用反射来获取特性对象。

4420
来自专栏MixLab科技+设计实验室

我们是否需要一款个性化内容推荐引擎3.0

这事情要从这说起,抖音天天给我推美女,淘宝天天给我推剃须刀,银行天天给我发信用卡提额短信……

10020
来自专栏Python数据科学

别眨眼!AI 通过自学秒解魔方,比人类纪录快两倍

能够将魔方快速复原一直是魔方爱好者乐此不疲的事,目前人类的纪录是3.47秒,由来自中国的杜宇生创造。

9420
来自专栏静Design

深度译文:UI中设定自适应颜色的原理(Part 02)

这就是为什么我们创建了所谓的“自适应调色板”。这些调色板遵循系统设计方法,其中设计者定义了具体的颜色范畴,而非创建静态颜色样本。颜色是根据其感知要求和关系定义的...

7520
来自专栏sktj

python 多线程 性能评估(并行编程 10)

starting tests non_threaded (1 iters) 0.000001 seconds threaded (1 threads) ...

8020
来自专栏Java学习录

Java中可以提升性能的小细节

一维数组和二维数组的恩怨情仇 保存同样的数据使用一维数组和二维数组的区别是前者以时间换空间后者是以空间换时间

7020
来自专栏木又AI帮

【leetcode刷题】T124-路径总和 II

https://leetcode-cn.com/problems/path-sum-ii/

5720

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励