是否有一个函数从PHP中的数组中提取"列"?

Ski*_*ick 15 php arrays

我有一个数组数组,具有以下结构:

array(array('page' => 'page1', 'name' => 'pagename1')
      array('page' => 'page2', 'name' => 'pagename2')
      array('page' => 'page3', 'name' => 'pagename3'))
Run Code Online (Sandbox Code Playgroud)

是否有内置函数将返回一个只包含'name'键值的新数组?所以我得到:

array('pagename1', 'pagename2', 'pagename3')
Run Code Online (Sandbox Code Playgroud)

Joh*_*nde 52

截至PHP 5.5你可以使用array_column():

<?php
$samples=array(
            array('page' => 'page1', 'name' => 'pagename1'),
            array('page' => 'page2', 'name' => 'pagename2'),
            array('page' => 'page3', 'name' => 'pagename3')
            );
$names = array_column($samples, 'name');
print_r($names);
Run Code Online (Sandbox Code Playgroud)

看到它在行动

  • 这应该是正确答案,因为php已经添加了内置函数,这正是OP所要求的. (10认同)

Ant*_*nna 16

为什么它必须是内置函数?不,没有,写自己的.

这是一个很好的和简单的,而不是这个线程中的其他人.

$namearray = array();

foreach ($array as $item) {
    $namearray[] = $item['name'];
}
Run Code Online (Sandbox Code Playgroud)

  • 正确回答"是否有内置功能?" 以下是John Conde的答案. (5认同)

fue*_*sjr 12

这是一种功能性的方法:

$data = array(
            array('page' => 'page1', 'name' => 'pagename1'),
            array('page' => 'page2', 'name' => 'pagename2'),
            array('page' => 'page3', 'name' => 'pagename3'));

$result = array_map(create_function('$arr', 'return $arr["name"];'), $data);
print_r($result);
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个,而且其中的 lambda 非常适合我目前的大脑,因为我一直在学习Scheme。+1 (2认同)

pap*_*rce 5

好吧有.至少对于PHP> 5.5.0并且它被称为array_column

PHP函数采用一个可选$index_key参数 - 根据PHP网站 - 声明:

$index_key

用作返回数组的索引/键的列.此值可以是列的整数键,也可以是字符串键名

在这里的答案中,我看到一个没有可选参数的剥离版本.我需要它,所以,这是完整的功能:

if (!function_exists('array_column')) {
    function array_column($array, $column, $index_key = null) {
        $toret = array();
        foreach ($array as $key => $value) {
            if ($index_key === null){
                $toret[] = $value[$column];
            }else{
                $toret[$value[$index_key]] = $value[$column];
            }
        }
        return $toret;
    }
}
Run Code Online (Sandbox Code Playgroud)