PHP实现提取多维数组指定一列的方法总结

吾爱主题 阅读:140 2021-09-22 15:01:00 评论:0

本文实例讲述了PHP实现提取多维数组指定一列的方法。分享给大家供大家参考,具体如下:

PHP中对多维数组特定列的提取,是个很常用的功能,正因为如此,PHP在5.5.0版本之后,添加了一个专用的函数array_column()。当然,如果你的PHP版本低于5.5.0,就得用别的方法处理了。

例如,对于以下这个数组:

?
1 2 3 4 5 6 7 $user = array (   '0' => array ( 'id' => 100, 'username' => 'a1' ),   '1' => array ( 'id' => 101, 'username' => 'a2' ),   '2' => array ( 'id' => 102, 'username' => 'a3' ),   '3' => array ( 'id' => 103, 'username' => 'a4' ),   '4' => array ( 'id' => 104, 'username' => 'a5' ), );

我们要提取其中的 usename 列,变成:

?
1 $username = array ( 'a1' , 'a2' , 'a3' , 'a4' , 'a5' );

方法有以下几种。

1 array_column函数法

用PHP内置的 array_column() 函数是最简单的方法,限制是PHP版本必须是5.5.0及以上版本,方法:

?
1 $username = array_column( $user , 'username' );

2 array_walk函数法

array_walk()函数使用用户自定义函数对数组中的每个元素做回调处理,实现当前功能的方法:

?
1 2 3 4 $username = array (); array_walk ( $user , function ( $value , $key ) use (& $username ){   $username [] = $value [ 'username' ]; });

3 array_map函数法

array_map()函数和array_walk() 作用类似,将回调函数作用到给定数组的单元上。

?
1 2 3 4 $username = array (); array_map ( function ( $value ) use (& $username ){   $username [] = $value [ 'username' ]; }, $user );

实际使用时,我们可以用array_map()写出和PHP内置array_column()一样功能的函数:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 /**   * 获取二维数组指定的一列,并以一维数组格式返回   * 作用和PHP5.5.0中的array_column()函数一样   * @param $input array 需要取出数组列的多维数组(或结果集)   * @param $column_key string 需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键。 也可以是NULL,此时将返回整个数组   * @param $index_key string 作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。   * @return array|null   */ function array_column( $input , $column_key , $index_key = null) {   $arr = array_map ( function ( $d ) use ( $column_key , $index_key ) {    if (!isset( $d [ $column_key ])) {     return null;    }    if ( $index_key !== null) {     return array ( $d [ $index_key ] => $d [ $column_key ]);    }    return $d [ $column_key ];   }, $input );   if ( $index_key !== null) {    $tmp = array ();    foreach ( $arr as $ar ) {     $tmp [key( $ar )] = current( $ar );    }    $arr = $tmp ;   }   return $arr ; }

4 foreach循环法

foreach循环相对上面的方法效率稍微低一些,但简单容易理解。

?
1 2 3 4 $username = array (); foreach ( $user as $value ) {   $username [] = $value [ 'username' ]; }

5 array_map变种

方法如下,意为把$user数组的每一项值的开头值移出,并获取移除的值作为新数组。注意此时新数组$username的键仍是原数组$user的键,如下。

?
1 $username = array_map ( 'array_shift' , $user );

注意:该功能会获取$user中的 id 列,而不是 username 列。

另外,如果需要获取二维数组每一项的开头列或结尾列,也可以这样做:

?
1 2 $username = array_map ( 'reset' , $user ); $username = array_map ( 'end' , $user );

这三个变种方法作用比较局限,仅在获取第一列或最后一列的时候有用,在复杂的数组中就难以发挥作用了。

参考资料:

  1. php获取二维数组中某一列的值集合
  2. php 快速的对二维数组某一列进行组装的方法

希望本文所述对大家PHP程序设计有所帮助。

原文链接:https://www.awaimai.com/885.html

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容