php – 有一种优雅的方法可以将结构简化为一个简单的数组吗?

这是a typical array structure

$s = array ('etc'=>'etc', 'fields' => 
  array (
   0 => array (
     'name'=>'year', 'description'=>'Year of ...', 'type'=>'integer',
   ),
   1 =>  array (
     'name'=>'label', 'description'=>'Offical short name', type'=>'string',
   ),
   2 => array (
     'name' => 'xx', 'description' => 'Xx ...', 'type' => 'string',
   )
 ));

这是一种非优雅的方式(或“不那么优雅的方式”)将大数组减少为只包含一列的简单数组:

 $fields = array();
 foreach ($strut['resources'][0]['schema']['fields'] as $r)
    $fields[] = $r['name'];

这有效,但是只用一条指令就可以做同样的事吗?也许使用像array_reduce(),但我不知道如何.

这是其他典型的“优雅PHP问题”:

 $fieldsByName = array();
 foreach ($strut['resources'][0]['schema']['fields'] as $r)
    $fields[$r['name']] = array(
        'description' =>$r['description'],
        'type' =>$r['type']
    );

有替代品吗?这里的想法是使用关键字(示例中的名称)作为数组键,其他元素作为常用字段,因此,通用的非优雅算法是

 $fieldsByName = array();
 foreach ($strut['resources'][0]['schema']['fields'] as $r){
    $key = $r['name'];
    unset($r['name']);
    $fields[$key] = $r;
 }
最佳答案
您可以使用array_column将具有键名称的所有值提取到另一个数组中

$names = array_column($strut['resources'][0]['schema']['fields'], 'name');

转载注明原文:php – 有一种优雅的方法可以将结构简化为一个简单的数组吗? - 代码日志