PHP 数组映射

有没有比获取所有“标签”值的数组更干净的方法?foreach

$methods[0]['label'] = 'test';
$methods[0]['nr']    = 99;
$methods[1]['label'] = 'whatever';
$methods[1]['nr']    = 10;


foreach($methods as $method) {
    $methodsLabel[] = $method['label'];
}

答案 1

不,没有比您实现的代码更快的方法了。由于函数调用的开销,所有其他方法的速度会变慢。对于一个小数组,差异将是微不足道的,但对于一个大数组(100个成员左右,取决于实现),差异可能是巨大的......

你可以,但我会坚持你上面发布的原始PHP...它更容易维护,恕我直言,它更具可读性...array_map

毕竟,请告诉我哪个一目了然地告诉你它的作用更多:

$results = array();
foreach ($array as $value) {
    $results[] = $value['title'];
}

$results = array_map(function($element) {
        return $element['title'];
    },
    $array
);

艺术

$callback = function($element) {
    return $element['title'];
}
$results = array_map($callback, $array);

就个人而言,第一个对我来说是最好的。很明显,它不知道在做什么。其他的需要语义知识才能理解。再加上速度较慢的事实,这对.array_maparray_mapforeach

代码应该只在必要时尽可能优雅。它应该是可读的高于一切...


答案 2

当然,请使用array_map

function getLabelFromMethod($method) {
   return $method['label'];
}

$labels = array_map('getLabelFromMethod', $methods);

如果您使用的是 PHP 5.3+,则还可以使用 lambda 函数:

$labels = array_map(function($m) {
   return $m['label'];
}, $methods);