首页 > 编程语言 >PHP 多维数组搜索 PHP multi dimensional array search

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

时间:2023-03-29 16:11:48浏览次数:34  
标签:key multi last name search 数组 array PHP first


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
      
)

 

如果你的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;
    }

}

 


标签:key,multi,last,name,search,数组,array,PHP,first
From: https://blog.51cto.com/u_8895844/6157188

相关文章

  • PHP 判断是否使用代理 PHP Proxy Detector
    1.php类IfoundthisclasslookingforsomethingelseactuallybutIrememberedIneededsomewhileagosomethingsimilarandIneverfoundone.I'msureitwi......
  • 基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化
    地址库在ELK中,我们可以使用地址库,来对IP进行分析,对日志进行分析,在ELKstack中只有Logstash可以做到,但是出图,是Kibana来出的,所以我们首先需要下载地址库数据文件,然后对Logstas......
  • deepin系统安装php8
    deepin系统安装php8一、deepin系统与php的版本1.deepin系统的版本 --社区版(20.8)2.php的版本 --PHP8.1.11(cli)二、下载php的源码包1.官网下载地址https://www......
  • PHP 获取当前完整URL路径
    不包含#$http_type=((isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']=='on')||(isset($_SERVER['HTTP_X_FORWARDED_PROTO'])&&$_SERVER['HTTP_X_FORWARDED_PROTO'......
  • ThinkPHP框架:更新个别字段的值setField、setInc、setDec的用法
    ThinkPHP有三个更新个别字段的值的函数,分别为setField、setInc、setDec。setInc():将数字字段值增加setDec():将数字字段值减少setField,根据条件更新一个或多个字段的值......
  • php 安装扩展 event
    本地环境php8.1,然后我想安装event扩展,找了找资料,直接一句话sudopeclinstallevent然后执行的过程中提示这些configure.ac:165:thetoplevelEnableinternal......
  • TopSolid 2023 v7.17 Multilingual edition full licensed
     T opSolid'Design2023在设计、钢材、模具和电极方面增加了近400项新功能: ·    逼真渲染模块已得到改进,引入了几个允许高质量逼真渲染的主要新功能。......
  • CF(2E) Keshi in Search of AmShZ (图论,最短路,建边权值变形)
      思路: 关键是操作2的性质:随机找->找一个路径最长的点操作1,阻止建边顾名思义, 发现和最短路很想,从n到每一个点的权值嘛改变权值更新方式,边的权值为:va......
  • elasticsearch-head 安装
    概念elasticsearch-head是elasticsearch的可视化工具,能够比较简便的查看、删除索引,查看索引数据,执行查询命令。它需要安装node和grunt才能使用安装ubuntu安装:下......
  • PHP5 soap web services
    一.开发环境:1WAMPserverPHP5.3+apache+mysql的集成环境2.Eclipse+PHP插件3。python2.5和PHP5语言版本二:开发代码1.python做一个服务端,发布为python......