pow*_*tac 16 php arrays mapping multidimensional-array
有没有比foreach获得所有"标签"值数组更清晰的方法?
$methods[0]['label'] = 'test';
$methods[0]['nr'] = 99;
$methods[1]['label'] = 'whatever';
$methods[1]['nr'] = 10;
foreach($methods as $method) {
$methodsLabel[] = $method['label'];
}
Run Code Online (Sandbox Code Playgroud)
irc*_*ell 26
不,没有比实现代码更快的方法.由于函数调用的开销,所有其他方法都会变慢.对于小阵列,差异将是微不足道的,但对于大型阵列(大约100个成员,取决于实现),差异可能很大......
你可以array_map,但我坚持你上面发布的原始PHP ...它更容易维护和恕我直言更可读...
毕竟,告诉我一眼就能告诉你它的作用更多:
$results = array();
foreach ($array as $value) {
$results[] = $value['title'];
}
Run Code Online (Sandbox Code Playgroud)
VS
$results = array_map(function($element) {
return $element['title'];
},
$array
);
Run Code Online (Sandbox Code Playgroud)
要么:
$callback = function($element) {
return $element['title'];
}
$results = array_map($callback, $array);
Run Code Online (Sandbox Code Playgroud)
就个人而言,第一个对我来说是最好的.这是不知道显而易见东西它在做什么.其他人需要了解array_map语义知识.结合较慢的事实,这array_map 是双赢foreach.
代码应该只是必要的优雅.它首先应该是可读的......
Jac*_*kin 16
当然,使用array_map:
function getLabelFromMethod($method) {
return $method['label'];
}
$labels = array_map('getLabelFromMethod', $methods);
Run Code Online (Sandbox Code Playgroud)
如果你使用的是PHP 5.3+,你也可以使用lambda函数:
$labels = array_map(function($m) {
return $m['label'];
}, $methods);
Run Code Online (Sandbox Code Playgroud)
小智 8
从PHP 5.5+开始,这正是array_column():
$methodsLabel = array_column($methods, 'label');
Run Code Online (Sandbox Code Playgroud)
http://php.net/manual/function.array-column.php
3v4l示例:https://3v4l.org/ZabAb
在 PHP 5.3+ 上,您可以使用与 array_map 配对的匿名函数。
$methodsLabel = array_map(function($item) { return $item['label']; }, $methods);
Run Code Online (Sandbox Code Playgroud)
array_map('array_shift', $methods);
Run Code Online (Sandbox Code Playgroud)
这里假设标签将是每个数组的第一个元素.
| 归档时间: |
|
| 查看次数: |
25152 次 |
| 最近记录: |