php - 我怎样才能编写这段代码来实现相同的结果,但只使用一个 foreach 语句?

标签 php foreach

$json = '[
    {
        "class1":
        {
            "function1":"return \"$a<b>$b</b>!\";"
        }
    },
    {
        "class2":
        {
            "function2":"return $b;",
            "function3":"return $c;"
        }
    }
]';
$decoded_classes = json_decode($json,true);
foreach($decoded_classes as $class)
{
    $class_name = key($class);
    if (is_array($class[$class_name]))
    {
        foreach($class[$class_name] as $function)
        {
            $function_name = key($class[$class_name]);
            $stack[$class_name][$function_name] = create_function($arr,$function);
        }
    } 
    else 
    {
        foreach($class as $function)
        {
            $c_name = key($class);
            $stack[$c_name] = create_function($arr,$function);
        }
    }
}
return $stack;

我需要这段代码执行相同的结果,但只有一个 foreach。我怎样才能做到这一点?

最佳答案

将 JSON 转换为...假设“PHPON”,您将得到:

$decoded_classes = Array(
    Array(
        "class1"=>Array(
            "function1"=>'return "$a<b>$b</b>!";'
        )
    )
    Array(
        "class2"=>Array(
            "function2"=>'return $b;',
            "function3"=>'return $c;'
        )
    )
);

正如您所看到的,您的结构并不是最有效的。基本上你的关卡太多了。

像这样重构 JSON:

{     
    "class1": {     
        "function1":"return \"$a<b>$b</b>!\";"
    },
    "class2": {     
        "function2":"return $b;",
        "function3":"return $c;"
    }
}

这样,“PHPON”就是:

$decoded_classes = Array(
    "class1"=>Array(
        "function1"=>'return "$a<b>$b</b>!";'
    )
    "class2"=>Array(
        "function2"=>'return $b;',
        "function3"=>'return $c;'
    )
);

现在您甚至根本不需要循环。访问 $decoded_classes['class1']['function1'] 将为您提供该代码。您唯一要做的就是将这些字符串转换为可调用函数,如下所示:

array_walk_recursive($decoded_classes,function(&$f) {$f = create_function($arr,$f);});

我不禁注意到您没有在代码中的任何地方定义 $arr 。您必须正确指定 $arr 才能正常工作。

关于php - 我怎样才能编写这段代码来实现相同的结果,但只使用一个 foreach 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11385552/

相关文章:

php - 在 PHP 和 mysql 中调试的最佳方法

perl - 三元运算符不允许在其中使用迭代运算符,但 if-else 允许吗?

php - 查询不起作用

php - 列出数组 php 中的数字

当我恢复修订时锁定每个循环的 VBA

java - JSTL forEach 遍历实现 Iterable 的用户定义类

php - 基于 bool PHP 变量的条件 CSS

php - 错误域=NSCocoaErrorDomain 代码=3840 JSONObject

php - ZipArchive::close():无法在 AWS EC2 Linux 中创建临时文件

php - 如何将 doesObjectExist() 请求批量发送到 Amazon S3?