如何根据另一个数组键的值创建数组?

new*_*php 18 php array-filter

我有一个数组如下:

$arr1 = array(
  0 => array(
    'name' => 'tom',
    'age' => 22
  ),
  1 => array(
    'name' => 'nick',
    'age' => 18
  )
);
Run Code Online (Sandbox Code Playgroud)

但是我想从它创建一个由所有名称组成的数组,因此它将成为:

$arr2 = array('tom', 'nick');
Run Code Online (Sandbox Code Playgroud)

我看过了array_filter(),但这不会起作用,因为这是一个多维数组!

如何使用name来自另一个多维数组的特定键()的值创建数组?

jwu*_*ler 35

较新版本的PHP允许使用array_map()函数表达式而不是函数名称:

$arr2 = array_map(function($person) {
    return $person['name'];
}, $arr1);
Run Code Online (Sandbox Code Playgroud)

但是如果使用PHP <5.3,则使用简单循环要容易得多,因为array_map()需要为这个简单的操作定义一个(可能是全局的)函数.

$arr2 = array();

foreach ($arr1 as $person) {
    $arr2[] = $person['name'];
}

// $arr2 now contains all names
Run Code Online (Sandbox Code Playgroud)

  • array_map和foreach()都是O(n),但是除了进行实际的迭代之外,array_map调用还必须构建函数并为数组中的reach项调用它.foreach()循环没有函数开销,所以它更快.如果你正在对数组中的每个项做一些复杂的事情,那么应该只使用array_map.这个特殊问题太过分了. (5认同)

小智 11

这可以通过使用array_coulmn以更简单的方式完成

$arr2= array_column($arr1, 'name');

print_r($arr2); //Array ( [0] => tom [1] => nick )
Run Code Online (Sandbox Code Playgroud)

array_column用于获取子数组的列.