是否有比foreach
更清晰的方法来获取所有“标签”值的数组?
$methods[0]['label'] = 'test';
$methods[0]['nr'] = 99;
$methods[1]['label'] = 'whatever';
$methods[1]['nr'] = 10;
foreach($methods as $method) {
$methodsLabel[] = $method['label'];
}
答案 0 :(得分:25)
不,没有比实现代码更快的方法。由于函数调用的开销,所有其他方法都会变慢。对于一个小阵列,差异将是微不足道的,但对于一个大的阵列(100个成员左右,取决于实现),差异可能是巨大的......
你可以array_map
它,但我会坚持你上面发布的原始PHP ...它更容易维护,恕我直言更具可读性......
毕竟,告诉我一目了然告诉你它的作用更多:
$results = array();
foreach ($array as $value) {
$results[] = $value['title'];
}
vs
$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
是双赢。
代码应该尽可能优雅。它应该是首先可读的......
答案 1 :(得分:16)
当然,请使用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);
答案 2 :(得分:7)
从PHP 5.5+开始,这正是array_column()
所做的:
$methodsLabel = array_column($methods, 'label');
http://php.net/manual/function.array-column.php
3v4l示例:https://3v4l.org/ZabAb
答案 3 :(得分:5)
array_map('array_shift', $methods);
这里假设标签将是每个数组的第一个元素。
答案 4 :(得分:4)
在PHP 5.3+上,您可以使用与array_map配对的匿名函数。
$methodsLabel = array_map(function($item) { return $item['label']; }, $methods);
答案 5 :(得分:2)
如果label是数组中的第一个元素,那么" current"使用array_map可以正常使用。
array_map('current', $methods);
答案 6 :(得分:1)
Arrow functions已引入PHP 7.4,这使它更加简洁。
/// <summary>
/// vector class
/// </summary>
public class di_vector
{
public double longitude { get; set; }
public double latitude { get; set; }
}