将多维 PHP 数组切片到其中一个元素上

2022-08-30 19:38:41

例如,您刚刚查询了一个数据库,然后收到了此2D数组。

$results = array(
    array('id' => 1, 'name' => 'red'  , 'spin' =>  1),
    array('id' => 2, 'name' => 'green', 'spin' => -1),
    array('id' => 3, 'name' => 'blue' , 'spin' => .5)
);

我经常发现自己在写这样的循环。

foreach($results as $result)
    $names[] = $result['name'];

我的问题是,有没有一种方法可以在不使用循环的情况下$names这个数组?使用回调函数算作使用循环。

下面是获取每个字段的更通用的示例。

foreach($results as $result)
    foreach($result as $key => $value)
        $fields[$key][] = $value;

答案 1

截至 PHP-5.5 的 6 月 20 日,有一个新的函数array_column

例如:

$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'
    )
);


$firstNames = array_column($records, 'first_name');
print_r($firstNames);

会再来

Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)

上面提到的链接中还有更多的例子。


答案 2

我投票@Devon的回应,因为真的没有办法用内置函数来完成你所要求的事情。你能做的最好的事情就是写你自己的:

function array_column($array, $column)
{
    $ret = array();
    foreach ($array as $row) $ret[] = $row[$column];
    return $ret;
}