这在PHP中有效吗?
foreach (function() {
return ['key' => 'Value'];
} as $key => $val){
$new_array = array('Key' => $key, 'Value' => $val);
}
我想在closure
中添加一些逻辑以获取动态数组
答案 0 :(得分:2)
几乎有效, 这项工作,稍微修改了功能,以便能够看到一些东西: https://3v4l.org/Tvja8
<?php
foreach ( (function() { return ['key' => 'Value'];})() as $key => $val){
echo $key . ': '.$val;
}
答案 1 :(得分:2)
按照本文所述,这是行不通的,因为您要迭代的是由匿名函数定义创建的Closure
对象。
要使它像这样组织起来工作,您需要立即显式调用函数,因此迭代的是它的返回值:
foreach (
( function () {
return [ 'key' => 'Value' ];
} )() as $key => $val
) {
$new_array = array( 'Key' => $key, 'Value' => $val );
}
答案 2 :(得分:1)
如果封装该函数并调用它,则它是有效的。但是它不可读,因此最好在foreach循环之外定义它:
foreach ((function() {
return ['key' => 'Value'];
})() as $key => $val) {
$new_array = array('Key' => $key, 'Value' => $val);
}
这将更具可读性:
$function = function() {
return ['key' => 'Value'];
}
foreach ($function() as $key => $value) {
$new_array = array('Key' => $key, 'Value' => $val);
}