这在PHP中有效吗?

时间:2019-02-26 11:02:34

标签: php arrays

这在PHP中有效吗?

foreach (function() { 
           return ['key' => 'Value'];
        } as $key => $val){
   $new_array = array('Key' => $key, 'Value' => $val);
}

我想在closure中添加一些逻辑以获取动态数组

3 个答案:

答案 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);
}