Note 006 Sharp array_column function

黄舟
Release: 2023-03-04 08:58:02
Original
1344 people have browsed it

工作中经常会遇到这样的问题。

我得到一个二维数组,但是数组当中只包含id和name。比如说这个数组是这样的:

$array = array( array('id'=>a, 'name'=>'Hy369'), array('id'=>b, 'name'=>'PHP博客'), array('id'=>c, 'name'=>'emlog'), );

有时候我们会需要通过这个数组,得到类似下面这样的新数组:

有时候我们会需要通过这个数组,得到类似下面这样的新数组:
$newArray = array(    
'Hy369',    
'PHP博客',   
 'emlog',
);
Copy after login

这时候,一般就会用一个foreach进行降维了。不知道各位朋友是怎样的,反正Hy369以前就经常这么干。

然而最后我发现,PHP5.5版本有了一个专门针对该需求的函数:array_column。

我们只需如此调用,即可得到我们需要的结果:

array_column($array, 'name');
Copy after login

这个函数还有个更加方便的功能,如果我们传递了第三个参数,例如:

array_column($array, 'test', 'id');
Copy after login

就会得到这样的结果:

$newArray = array(   
 'a'=>'Hy369',   
  'b'=>'PHP博客',   
   'c'=>'emlog',
);
Copy after login

你们怎么看,反正我是醉了,这个不是一般的爽啊。

不过有个问题,我刚才已经提到,这个要php5.5版本开始才会支持。

不过,人民的力量是无穷的,已经有低版本的兼容方法了:

if (!function_exists('array_column')) {    function array_column($array, $column_key, $index_key = null)
    {        return array_reduce($array, function ($result, $item) use ($column_key, $index_key)
        {            if (null === $index_key) {
                $result[] = $item[$column_key];
            } else {
                $result[$item[$index_key]] = $item[$column_key];
            }            return $result;
        }, []);
    }
}
Copy after login

不过要注意,我这里提供的版本仅支持5.3及其以上的,因为其中的匿名函数的方式,也就是function use的方式,从5.3开始被支持,如果要兼容更低的版本,网上也有对应的方法:

if (!function_exists('array_column')) {    function array_column(array $array, $columnKey, $indexKey = null)
    {
        $result = array();        foreach ($array as $subArray) {            if (!is_array($subArray)) {                continue;
            } elseif (is_null($indexKey) && array_key_exists($columnKey, $subArray)) {
                $result[] = $subArray[$columnKey];
            } elseif (array_key_exists($indexKey, $subArray)) {                if (is_null($columnKey)) {
                    $result[$subArray[$indexKey]] = $subArray;
                } elseif (array_key_exists($columnKey, $subArray)) {
                    $result[$subArray[$indexKey]] = $subArray[$columnKey];
                }
            }
        }        return $result;
    }
}
Copy after login

这个绝对是万能的方法了,虽然也用到了foreach,不过独立成了一个函数,也比每次要用的时候单独去foreach方便多了。

 以上就是笔记006 犀利的array_column函数的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template