来自多维数组的Array_values

the*_*cat 8 php arrays

阵列看起来像

$arr = array(

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

)
Run Code Online (Sandbox Code Playgroud)

我想得到一个包含第一列值的数组,比如 array('a', 'c', 'e')

我知道可以通过迭代数组并将值存储在另一个数组中来轻松完成,但是有更短的方法,内置的PHP函数还是什么?

Joh*_*nde 14

从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
)
Run Code Online (Sandbox Code Playgroud)


Pau*_*aul 12

$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');
Run Code Online (Sandbox Code Playgroud)


小智 6

你可以这样做:

$foo = array_map('reset', $arr);
Run Code Online (Sandbox Code Playgroud)

之后读取代码的任何人都需要知道重置的副作用是返回数组中的第一个值.这可能或者可能不再具有可读性 - 并且如果数组没有索引为零的条目,则它具有不工作的缺点:

$baz = array_map(function ($a) { return $a[0]; }, $arr);
Run Code Online (Sandbox Code Playgroud)

如果你想要非常清楚并且不介意有一个功能:

function array_first($a) {
    return reset($a);
}

$baz = array_map('array_first', $arr);
Run Code Online (Sandbox Code Playgroud)