gpt4 book ai didi

php - 如何编写此代码以实现相同的结果但只有一个 foreach 语句?

转载 作者:行者123 更新时间:2023-12-04 05:39:56 25 4
gpt4 key购买 nike

$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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com