繁体   English   中英

PHP 数组映射

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM