php array_column 方法可以返回数组中指定的一列,但不能返回多列,本文将介绍array_column方法的使用,并用代码演示返回数组中指定多列的方法。

1.array_column说明

array_column可以返回数组中指定一列

array array_column ( array $input , mixed $column_key [, mixed $index_key = null ] )

1

参数说明:

input
需要取出数组列的多维数组。 如果提供的是包含一组对象的数组,只有 public 属性会被直接取出。 为了也能取出 private 和 protected 属性,类必须实现 __get() 和 __isset() 魔术方法。

column_key
需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键,也可以是属性名。 也可以是NULL,此时将返回整个数组(配合index_key参数来重置数组键的时候,非常管用)

index_key
作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。

例子:
返回数组中name列

<?php
$arr = array(
array('id'=>1001, 'name'=>'fdipzone', 'age'=>18, 'profession'=>'programmer'),
array('id'=>1002, 'name'=>'terry', 'age'=>19, 'profession'=>'designer'),
array('id'=>1003, 'name'=>'alex', 'age'=>20, 'profession'=>'tester'),
);

$result = array_column($arr, 'name');

print_r($result);
?>

输出:

Array
(
[0] => fdipzone
[1] => terry
[2] => alex
)

2.返回数组中指定多列的方法

array_column方法可以返回数组中指定一列,但不能返回多列,因此写了以下这个方法,支持返回数组中多列,参数调用与array_column相似。

<?php
/**
* 返回数组中指定多列
*
* @param Array $input 需要取出数组列的多维数组
* @param String $column_keys 要取出的列名,逗号分隔,如不传则返回所有列
* @param String $index_key 作为返回数组的索引的列
* @return Array
*/
function array_columns($input, $column_keys=null, $index_key=null){
$result = array();

$keys =isset($column_keys)? explode(',', $column_keys) : array();

if($input){
foreach($input as $k=>$v){

// 指定返回列
if($keys){
$tmp = array();
foreach($keys as $key){
$tmp[$key] = $v[$key];
}
}else{
$tmp = $v;
}

// 指定索引列
if(isset($index_key)){
$result[$v[$index_key]] = $tmp;
}else{
$result[] = $tmp;
}

}
}

return $result;
}

// 演示代码
$arr = array(
array('id'=>1001, 'name'=>'fdipzone', 'age'=>18, 'profession'=>'programmer'),
array('id'=>1002, 'name'=>'terry', 'age'=>19, 'profession'=>'designer'),
array('id'=>1003, 'name'=>'alex', 'age'=>20, 'profession'=>'tester'),
);

echo '指定返回列及索引列'.PHP_EOL;
$result = array_columns($arr, 'name,profession', 'id');
print_r($result);

echo PHP_EOL.'指定返回列,不指定索引列'.PHP_EOL;
$result = array_columns($arr, 'name,profession');
print_r($result);

echo PHP_EOL.'不指定返回列,指定索引列'.PHP_EOL;
$result = array_columns($arr, null, 'id');
print_r($result);

echo PHP_EOL.'不指定返回列,不指定索引列'.PHP_EOL;
$result = array_columns($arr);
print_r($result);
?>

输出:

指定返回列及索引列
Array
(
[1001] => Array
(
[name] => fdipzone
[profession] => programmer
)

[1002] => Array
(
[name] => terry
[profession] => designer
)

[1003] => Array
(
[name] => alex
[profession] => tester
)

)

指定返回列,不指定索引列
Array
(
[0] => Array
(
[name] => fdipzone
[profession] => programmer
)

[1] => Array
(
[name] => terry
[profession] => designer
)

[2] => Array
(
[name] => alex
[profession] => tester
)

)

不指定返回列,指定索引列
Array
(
[1001] => Array
(
[id] => 1001
[name] => fdipzone
[age] => 18
[profession] => programmer
)

[1002] => Array
(
[id] => 1002
[name] => terry
[age] => 19
[profession] => designer
)

[1003] => Array
(
[id] => 1003
[name] => alex
[age] => 20
[profession] => tester
)

)

不指定返回列,不指定索引列
Array
(
[0] => Array
(
[id] => 1001
[name] => fdipzone
[age] => 18
[profession] => programmer
)

[1] => Array
(
[id] => 1002
[name] => terry
[age] => 19
[profession] => designer
)

[2] => Array
(
[id] => 1003
[name] => alex
[age] => 20
[profession] => tester
)

)

php 返回数组中指定多列的方法的更多相关文章

  1. 返回数组中指定的一列,将键值作为元素键名array_column

    array_column() 函数 从记录集中取出 last_name 列: <?php // 表示由数据库返回的可能记录集的数组 $a = array( array( 'id' => 5 ...

  2. 【LeetCode每天一题】Find First and Last Position of Element in Sorted Array(找到排序数组中指定元素的开始和结束下标)

    Given an array of integers nums sorted in ascending order, find the starting and ending position of ...

  3. 用JS编写一个函数,返回数组中重复出现过的元素

    用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: , , , , , , , ]; var getRepeat = function (arr) { var obj = {}; , le ...

  4. 二维数组过滤,根据多个条件获取二维数组中指定的arr

    /** * 二维数组过滤,根据多个条件获取二维数组中指定的arr * @param $data_arr * @param $lm_number * @param $source_type * @par ...

  5. PHP提取多维数组指定一列的方法大全

    目录 1 array_column函数法 2 array_walk函数法 3 array_map函数法 4 foreach循环法 5 array_map变种 PHP中对多维数组特定列的提取,是个很常用 ...

  6. C#对Excel中指定一列或一行实现隐藏或显示!

    C#对Excel中指定一列或一行实现隐藏或显示!不会,求指导!

  7. 移除数组中指定键(Yii2)

    /** * 移除数组中指定key * @param $data * @param $key * @return array */ public static function removeKey($d ...

  8. react找到对象数组中指定的值

    找到对象数组中指定的值var array = [            { label: "Custom", value: "0" },            ...

  9. 根据指定id取出数组中指定对象

    // 需求:根据Id取出数组中指定的对象 let arr = [ { id: 1, rotationAngle: 330, target: '目标1' }, { id: 2, rotationAngl ...

随机推荐

  1. Tsung压力测试:Openfire

    环境准备 安装Tsung.安装openfire.安装Spark 要对openfire进行压力测试,因此我们主要讲解如何利用jabber_register.xml在openfire上面注册用户,以及利用 ...

  2. eclipse添加web项目报错“Target runtime Apache Tomcat v7.0 is not defined.”

    项目检出后,发现是Tomcat7 发布的,修改文件: 工作空间--->项目名称--->.settings--->org.eclipse.wst.common.project.face ...

  3. Java 程序员最喜欢的 11 款免费 IDE 编辑器

    Java开发人员需要花费大量的时间埋头于Java代码中,使用各种不同的IDE(Intergrated Development Environment)来开发Java代码,所以下面我将为大家介绍11个不 ...

  4. xml与java代码相互装换的工具类

    这是一个java操作xml文件的工具类,最大的亮点在于能够通过工具类直接生成xml同样层次结构的java代码,也就是说,只要你定义好了xml的模板,就能一键生成java代码.省下了自己再使用工具类写代 ...

  5. python基础借鉴

    这是一个链接 这个是egon的链接 吴沛其的博客

  6. CEPH集群RBD快照创建、恢复、删除、克隆(转)

    Ceph支持一个非常好的特性,以COW(写时复制)的方式从RBD快照创建克隆,在Ceph中被称为快照分层.分层特性允许用户创建多个CEPH RBD克隆实例.这些特性应用于OpenStack等云平台中 ...

  7. 设计模式13---桥接模式(Bridge Pattern)

    桥接模式将抽象与具体实现分离,使得抽象与具体实现可以各自改变互不影响.桥接模式属于设计模式中的结构模式. 桥梁模式涉及的角色 抽象(Abstraction)角色:抽象定义,引用对接口对象的引用. 重新 ...

  8. 【重要】拷贝NIOS II工程后,修改工程前必须要做的10件事

    1.拷贝现有工程到新的目录2.打开Quartus II工程文件3.打开NIOS II EDS软件4.切换工作空间到当前的新工程根目录5.在NIOS II EDS软件中将已有的软件工程先删除掉(不要勾选 ...

  9. APUE(8)---进程控制(1)

    一.进程标识 每个进程都有一个非负整型标识的唯一进程ID.因为进程ID标识符总是唯一的,常将其用做其他标识符的一部分以保证其唯一性.进程ID虽然是唯一的, 但是却是可以复用的.ID为0的进程通常是调度 ...

  10. 深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) [转载]

    本系列文章导航 深入浅出Java多线程(1)-方法 join 深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) 深入浅出多线程(3)-Future异步模式以及在JDK1.5Concu ...