从多维数组中获取特定列的数组值

10

数组的样子如下:

$arr = array(

  array('a', 'b'),
  array('c', 'd'),
  array('e', 'f'),

)

我想要获取一个包含第一列数值的数组,例如 array('a', 'c', 'e')

我知道可以通过迭代数组并将值存储在另一个数组中轻松完成,但是否有更短的方法,例如内置的PHP函数或其他方式?


array_values()会返回数组中的元素,但我认为这并没有什么帮助。 - Aram Kocharyan
1
不,get_first_entry_from_all_sub_arrays() 不是内置的。你必须以某种方式循环。 - deceze
4个回答

21

从PHP 5.5开始你可以使用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'
    )
);

$lastNames = array_column($records, 'last_name', 'id');

print_r($lastNames);

Array
(
    [2135] => Doe
    [3245] => Smith
    [5342] => Jones
    [5623] => Doe
)

16
$arr = array(

  array('a', 'b'),
  array('c', 'd'),
  array('e', 'f'),

);

// You can make it look concise using array_map :)
$arr = array_map(function($x){ return $x[0]; }, $arr);

// $arr = array('a', 'c', 'e');

7
你可以这样做:
$foo = array_map('reset', $arr);

任何阅读你代码的人都需要知道,reset 的一个副作用是返回数组中的第一个值。这可能会使代码更易读,但它也有一个缺点,即如果数组没有以零为索引的条目,则无法正常工作:

$baz = array_map(function ($a) { return $a[0]; }, $arr);

如果你想非常清晰并且不介意有一个函数存在:
function array_first($a) {
    return reset($a);
}

$baz = array_map('array_first', $arr);

1
reset 返回的是第一个元素,而不是由 0 索引的元素。无论哪种方式都可以正常工作。 - deceze
我丢失了字符串键,它被整数替换了,这对于通过数字来压平数组索引很有帮助,但不适用于通过字符串键进行索引。 - bdalina

0

不使用任何循环是不可能做到的...

为了实现它,只需使用循环并将值存储在新数组中,或者使用回调函数来获取您的值。


与本页上的其他答案以及Stack Overflow上所有关于此主题的重复页面上无数的答案相比,这个“提示”似乎并没有为研究人员提供太多帮助。在我看来,可以安全地将其删除。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接