[英]PHP array mapping
有没有比foreach
更干净的方法来获取所有“标签”值的数组?
$methods[0]['label'] = 'test';
$methods[0]['nr'] = 99;
$methods[1]['label'] = 'whatever';
$methods[1]['nr'] = 10;
foreach($methods as $method) {
$methodsLabel[] = $method['label'];
}
不,没有比您实现的代码更快的方法了。 由于函数调用的开销,所有其他方法都会变慢。 对于一个小数组,差异将是微不足道的,但对于一个大数组(100 个左右,取决于实现),差异可能很大......
您可以使用array_map
它,但我会坚持使用您在上面发布的原始 PHP ......它更容易维护,恕我直言更具可读性......
毕竟,告诉我哪个一目了然告诉您它的功能更多:
$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_map
语义才能理解。 夫妇,与事实, array_map
比较慢,这是一个双赢foreach
。
代码应该只在必要时尽可能优雅。 它应该比其他一切都可读......
当然,使用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);
从 PHP 5.5+ 开始,这正是array_column()
所做的:
$methodsLabel = array_column($methods, 'label');
http://php.net/manual/function.array-column.php
3v4l 示例: https ://3v4l.org/ZabAb
array_map('array_shift', $methods);
这里假设标签将是每个数组的第一个元素。
在 PHP 5.3+ 上,您可以使用与 array_map 配对的匿名函数。
$methodsLabel = array_map(function($item) { return $item['label']; }, $methods);
如果 label 是数组中的第一个元素,则带有array_map 的“当前”将正常工作。
array_map('current', $methods);
PHP 7.4 中引入了箭头函数,这使得它更简洁一些。
$methodsLabel = array_map(fn($x) => $x['label'], $methods)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.