array_column() 返回input
数组中键值为column_key
的列, 如果指定了可选参数index_key
,那么input
数组中的这一列的值将作为返回数组中对应值的键。
参数
input
需要取出数组列的多维数组(或结果集)
column_key
需要返回值的列,它可以是索引数组的列索引,或者是关联数组的列的键。 也可以是NULL
,此时将返回整个数组(配合index_key
参数来重置数组键的时候,非常管用)
index_key
作为返回数组的索引/键的列,它可以是该列的整数索引,或者字符串键值。
返回值
从多维数组中返回单列数组
范例
Example #1 从结果集中取出first names列
<?php // Array representing a possible record set returned from a database $records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones', ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe', ) ); $first_names = array_column($records, 'first_name'); print_r($first_names); ?>
以上例程会输出:
Array
(
[0] => John
[1] => Sally
[2] => Jane
[3] => Peter
)
(
[0] => John
[1] => Sally
[2] => Jane
[3] => Peter
)
Example #2 从结果集中总取出last names列,用相应的id作为键值
<?php // Using the $records array from Example #1 $last_names = array_column($records, 'last_name', 'id'); print_r($last_names); ?>
以上例程会输出:
Array
(
[2135] => Doe
[3245] => Smith
[5342] => Jones
[5623] => Doe
)
(
[2135] => Doe
[3245] => Smith
[5342] => Jones
[5623] => Doe
)
原文:http://php.net/manual/zh/function.array-column.php
如果你的php版本没有array_column函数,那么可以用一下代码代替:
<?php /** * This file is part of the array_column library * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * * @copyright Copyright (c) Ben Ramsey (http://benramsey.com) * @license http://opensource.org/licenses/MIT MIT */ if (!function_exists('array_column')) { /** * Returns the values from a single column of the input array, identified by * the $columnKey. * * Optionally, you may provide an $indexKey to index the values in the returned * array by the values from the $indexKey column in the input array. * * @param array $input A multi-dimensional array (record set) from which to pull * a column of values. * @param mixed $columnKey The column of values to return. This value may be the * integer key of the column you wish to retrieve, or it * may be the string key name for an associative array. * @param mixed $indexKey (Optional.) The column to use as the index/keys for * the returned array. This value may be the integer key * of the column, or it may be the string key name. * @return array */ function array_column($input = null, $columnKey = null, $indexKey = null) { // Using func_get_args() in order to check for proper number of // parameters and trigger errors exactly as the built-in array_column() // does in PHP 5.5. $argc = func_num_args(); $params = func_get_args(); if ($argc < 2) { trigger_error("array_column() expects at least 2 parameters, {$argc} given", E_USER_WARNING); return null; } if (!is_array($params[0])) { trigger_error( 'array_column() expects parameter 1 to be array, ' . gettype($params[0]) . ' given', E_USER_WARNING ); return null; } if (!is_int($params[1]) && !is_float($params[1]) && !is_string($params[1]) && $params[1] !== null && !(is_object($params[1]) && method_exists($params[1], '__toString')) ) { trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING); return false; } if (isset($params[2]) && !is_int($params[2]) && !is_float($params[2]) && !is_string($params[2]) && !(is_object($params[2]) && method_exists($params[2], '__toString')) ) { trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING); return false; } $paramsInput = $params[0]; $paramsColumnKey = ($params[1] !== null) ? (string) $params[1] : null; $paramsIndexKey = null; if (isset($params[2])) { if (is_float($params[2]) || is_int($params[2])) { $paramsIndexKey = (int) $params[2]; } else { $paramsIndexKey = (string) $params[2]; } } $resultArray = array(); foreach ($paramsInput as $row) { $key = $value = null; $keySet = $valueSet = false; if ($paramsIndexKey !== null && array_key_exists($paramsIndexKey, $row)) { $keySet = true; $key = (string) $row[$paramsIndexKey]; } if ($paramsColumnKey === null) { $valueSet = true; $value = $row; } elseif (is_array($row) && array_key_exists($paramsColumnKey, $row)) { $valueSet = true; $value = $row[$paramsColumnKey]; } if ($valueSet) { if ($keySet) { $resultArray[$key] = $value; } else { $resultArray[] = $value; } } } return $resultArray; } }
原文:https://github.com/ramsey/array_column/blob/master/src/array_column.php
参考: http://stackoverflow.com/a/6661561/4009148
转自:PHP 多维数组搜索 PHP multi dimensional array search
相关推荐
例子 3:Sorting multi-dimensional array <?php $ar = array( array("10", 11, 100, 100, "a"), array( 1, 2, "2", 3, 1) ); array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC)...
6. 数组和多维数组(Array and Multi-Dimensional Array) 问题6考察了 Java 或 C# 语言中的多维数组。多维数组是一种数组,其中每个元素也是一个数组。访问多维数组的元素需要使用索引,例如 myArray3[2][2] 访问...
本主题将探讨一个基于模板实现的高效多维度Array类,该类旨在提供灵活、高性能的多维数组操作。 首先,让我们理解模板编程。模板是C++中的一种泛型编程工具,它允许我们编写通用的代码,适用于多种数据类型。模板...
Blitz ++是一个C ++模板类库,为科学计算提供了高性能的多维数组容器。 Blitz ++在位置上进行了一些更改: 最初的Blitz ++网站位于http://oonumerics.org/blitz (存档于 )。 Blitz ++随后转移到SourceForge,为 。...
1. **多维数组(Multi-dimensional Arrays)**:VAST的核心是其对多维数组的高效存储和操作。这种数据结构能够处理复杂的数值计算任务,特别是在科学计算和大数据分析中。 2. **向量化计算(Vectorized Computation...
4. **多维数组(Multi-dimensional Array)** 多维数组扩展了矩阵的概念,允许有三个或更多维度。例如,`A = rand(2, 3, 4)`创建了一个3维数组。在复杂的统计分析,如图像处理或时间序列分析中,多维数组尤为有用。 ...
复合数据类型包括结构体(structure)、细胞数组(cell array)、多维数组(multi-dimensional array)和数组对象(array object)。结构体可以看作是具有多个字段的数据容器,每个字段可以存储不同类型的数据。细胞...
4. 多维数组(Multi-Dimensional Array):在C++中,多维数组是一种数据结构,用于存储二维或多维数据。在本程序中,使用char maze[50][100]来存储迷宫的数据。 5. 函数分离(Function Separation):在本程序中,...
在这个项目中,学生将学习并实践多种数据结构和算法,尤其是与多维数组(MADD,Multi-Dimensional Array Data)和LDS(Linked Data Structures)相关的概念。DJ可能是项目的简称或者指代特定的编程任务。 在Java...
6. **多维数组函数(Multi-dimensional Array Functions)** - `cat`: 合并多个数组形成高维数组。 - `ndims`: 获取数组的维度数。 - `ndgrid`: 创建多维网格数组。 - `ipermute`: 广义的逆序排列。 - `permute`:...
5. **数据类型**:MATLAB支持多种数据类型,包括标量(scalar)、向量(vector)、矩阵(matrix)、多维数组(multi-dimensional array)、字符数组(char array)、结构体(struct)和细胞数组(cell array)等。...
基础的数据类型包括标量(scalar)、向量(vector)、矩阵(matrix)以及多维数组(multi-dimensional array)。理解如何定义和操作这些数据结构是使用MATLAB进行计算的关键。 其次,MATLAB的函数和脚本是实现计算...
**5.7 多维数组(Multi-dimensional Arrays)** - **二维数组与多维数组**:描述如何声明和使用二维及更高维度的数组。 **5.8 指针数组的初始化(Initialization of Pointer Arrays)** - **动态初始化**:介绍如何...
在"Using Simple Arrays"和"Using Multi-Dimensional Arrays"的作业中,如果数组被封装在类中,那么这个类可能就继承自一个基础的Array类,提供通用的操作方法。 接着,**多态性**是Java中的另一个重要概念,它指的...
在MATLAB中,你可以创建各种类型的变量,如标量(scalar)、向量(vector)、矩阵(matrix)以及多维数组(multi-dimensional array)。数据类型包括数值型(如double、single、int8等)、字符型(char)、逻辑型...
**5.7 多维数组(Multi-dimensional Arrays)** - **二维及以上数组**:介绍多维数组的声明与访问方式。 **5.8 指针数组初始化(Initialization of Pointer Arrays)** - **动态分配**:使用指针数组进行动态内存...
- **5.7 多维数组**(Multi-dimensional Arrays) - 讨论二维及以上数组的定义和使用。 - **5.8 指针数组的初始化**(Initialization of Pointer Arrays) - 介绍指针数组的初始化方法。 - **5.9 指针与多维数组**...
- **Multi-Dimensional Array**(多维数组):由两个或更多维度的数组构成的数据结构。 - **Row Major Order**(行优先顺序):存储多维数组时,先存储完一行再存储下一行的方式。 - **Column Major Order**(列优先...
- **双端堆结构和多维堆(5.9 Double-Ended Heap Structures and Multi-Dimensional Heaps)**:介绍了双端堆和多维堆的概念及其应用。 - **具有恒定时间更新的堆相关结构(5.10 Heap-Related Structures with ...