`
天梯梦
  • 浏览: 13729699 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

PHP 多维数组搜索 PHP multi dimensional array search

 
阅读更多

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
)

 

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
)

 

原文: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

 

分享到:
评论

相关推荐

    PHP 多维数组排序实现代码

    例子 3:Sorting multi-dimensional array &lt;?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)...

    微软暑期实习笔试题.docx

    6. 数组和多维数组(Array and Multi-Dimensional Array) 问题6考察了 Java 或 C# 语言中的多维数组。多维数组是一种数组,其中每个元素也是一个数组。访问多维数组的元素需要使用索引,例如 myArray3[2][2] 访问...

    基于模板实现的高效多维度Array类(含测试代码)

    本主题将探讨一个基于模板实现的高效多维度Array类,该类旨在提供灵活、高性能的多维数组操作。 首先,让我们理解模板编程。模板是C++中的一种泛型编程工具,它允许我们编写通用的代码,适用于多种数据类型。模板...

    blitz:适用于C ++的Blitz ++多维数组库

    Blitz ++是一个C ++模板类库,为科学计算提供了高性能的多维数组容器。 Blitz ++在位置上进行了一些更改: 最初的Blitz ++网站位于http://oonumerics.org/blitz (存档于 )。 Blitz ++随后转移到SourceForge,为 。...

    VAST-c++-0.4.4-src.7z

    1. **多维数组(Multi-dimensional Arrays)**:VAST的核心是其对多维数组的高效存储和操作。这种数据结构能够处理复杂的数值计算任务,特别是在科学计算和大数据分析中。 2. **向量化计算(Vectorized Computation...

    matlab数理统计数据分析:1 变量类型(含教学视频).zip

    4. **多维数组(Multi-dimensional Array)** 多维数组扩展了矩阵的概念,允许有三个或更多维度。例如,`A = rand(2, 3, 4)`创建了一个3维数组。在复杂的统计分析,如图像处理或时间序列分析中,多维数组尤为有用。 ...

    MATLAB数据及其运算_matlab源码.rar

    复合数据类型包括结构体(structure)、细胞数组(cell array)、多维数组(multi-dimensional array)和数组对象(array object)。结构体可以看作是具有多个字段的数据容器,每个字段可以存储不同类型的数据。细胞...

    C++语言编写的迷宫----完整代码

    4. 多维数组(Multi-Dimensional Array):在C++中,多维数组是一种数据结构,用于存储二维或多维数据。在本程序中,使用char maze[50][100]来存储迷宫的数据。 5. 函数分离(Function Separation):在本程序中,...

    CS246_MADD_LDS_DJ

    在这个项目中,学生将学习并实践多种数据结构和算法,尤其是与多维数组(MADD,Multi-Dimensional Array Data)和LDS(Linked Data Structures)相关的概念。DJ可能是项目的简称或者指代特定的编程任务。 在Java...

    matlab常用函数matlab常用函数

    6. **多维数组函数(Multi-dimensional Array Functions)** - `cat`: 合并多个数组形成高维数组。 - `ndims`: 获取数组的维度数。 - `ndgrid`: 创建多维网格数组。 - `ipermute`: 广义的逆序排列。 - `permute`:...

    matlab program.rar

    5. **数据类型**:MATLAB支持多种数据类型,包括标量(scalar)、向量(vector)、矩阵(matrix)、多维数组(multi-dimensional array)、字符数组(char array)、结构体(struct)和细胞数组(cell array)等。...

    MATLAB的三些东西.zip

    基础的数据类型包括标量(scalar)、向量(vector)、矩阵(matrix)以及多维数组(multi-dimensional array)。理解如何定义和操作这些数据结构是使用MATLAB进行计算的关键。 其次,MATLAB的函数和脚本是实现计算...

    c程序设计语言 第二版英文版

    **5.7 多维数组(Multi-dimensional Arrays)** - **二维数组与多维数组**:描述如何声明和使用二维及更高维度的数组。 **5.8 指针数组的初始化(Initialization of Pointer Arrays)** - **动态初始化**:介绍如何...

    java作业(陈旭东)面向对象与设计

    在"Using Simple Arrays"和"Using Multi-Dimensional Arrays"的作业中,如果数组被封装在类中,那么这个类可能就继承自一个基础的Array类,提供通用的操作方法。 接着,**多态性**是Java中的另一个重要概念,它指的...

    MATLAB-JC.rar_JC MATLAB_matlab教程

    在MATLAB中,你可以创建各种类型的变量,如标量(scalar)、向量(vector)、矩阵(matrix)以及多维数组(multi-dimensional array)。数据类型包括数值型(如double、single、int8等)、字符型(char)、逻辑型...

    The_C_Programming_Language(C程序设计语言).pdf

    **5.7 多维数组(Multi-dimensional Arrays)** - **二维及以上数组**:介绍多维数组的声明与访问方式。 **5.8 指针数组初始化(Initialization of Pointer Arrays)** - **动态分配**:使用指针数组进行动态内存...

    The C Programming Language(2nd Edition).pdf

    - **5.7 多维数组**(Multi-dimensional Arrays) - 讨论二维及以上数组的定义和使用。 - **5.8 指针数组的初始化**(Initialization of Pointer Arrays) - 介绍指针数组的初始化方法。 - **5.9 指针与多维数组**...

    数据结构基本英语词汇

    - **Multi-Dimensional Array**(多维数组):由两个或更多维度的数组构成的数据结构。 - **Row Major Order**(行优先顺序):存储多维数组时,先存储完一行再存储下一行的方式。 - **Column Major Order**(列优先...

    数据结构-advanced data structure (peter brass)

    - **双端堆结构和多维堆(5.9 Double-Ended Heap Structures and Multi-Dimensional Heaps)**:介绍了双端堆和多维堆的概念及其应用。 - **具有恒定时间更新的堆相关结构(5.10 Heap-Related Structures with ...

Global site tag (gtag.js) - Google Analytics