我只是想确保我做得对,这不会造成任何冲突。
我有一个调用自己的函数,如果可以,需要您的批准?
<?php
function determine($the_array){
foreach ($the_array as $key => $value) {
switch ($key) {
case 'in':
echo $value;
break;
case 'out':
echo $value;
break;
case 'level':
echo '<ul>';
determine($value);
echo '</ul>';
break;
}
}
}
这是数组:
$the_array = array(
'in' => '<li>Simple IN</li>',
'out' => '<li>Simple OUT</li>',
'level' => array(
'in' => '<li>Simple IN 2</li>',
'out' => '<li>Simple OUT 2</li>',
'level' => array(
'in' => '<li>Simple IN 3</li>',
'out' => '<li>Simple OUT 3</li>'
),
),
);
这是最终的初始化:
echo '<ul>';
determine($the_array);
echo '</ul>';
结果就是我想要的样子,效果很好,但我不知道这是否是一种好的做法。
递
归函数是可以的 - 但如果你不确定自己知道自己在做什么,那就很危险了。如果一个函数有可能最终陷入递归循环(它一遍又一遍地调用自己),你要么超时,内存不足,要么导致僵尸启示录。
把递归调用想象成一把非常非常锋利的刀——在经验丰富的厨师手中,它是天作之合,在洗碗机的手中,它是一根等待发生的失落手指。
PHP试图玩得很好,默认情况下将递归深度限制为 100(尽管这可以更改),但对于几乎所有情况,如果您的递归深度达到 100,事故已经发生,PHP 的反应是阻止任何其他行人徘徊在交通中。 :)
Fluffeh就递归函数提供了足够的答案。但是当对大型数组/对象/等使用递归时,您应该注意代码的优化,以便执行不需要太多内存或 CPU 能力。
您可以轻松优化代码,使其更简洁、占用更少的内存并更灵活地应对意外数据。请注意函数参数列表中的 &(它消除了每次调用嵌套函数时创建数组的副本)。
function determine(& $the_array){
foreach ($the_array as $key => $value) {
switch ($key) {
case 'in':
case 'out':
echo $value;
break;
case 'level':
if (!is_array($value)) break;
echo '<ul>';
determine($value);
echo '</ul>';
break;
}
}
}
我不知道
这是否是一个很好的解决方案,但我使用这个从自身内部调用函数:
function my_calucar(){
$arrayy= array('mine' => '1', 'yours' => '24', 'her' => '34');
foreach ($arrayy as $each=>$value) {
switch ($each) {
default:
my_calucar($value);
}
}
}
我认为如果您知道数组的深度,最好使用
$list = "";
foreach ($the_array as $array) {
if(is_array($array)) {
foreach($array as $sub_array) {
if(is_array($sub_array)) {
foreach($sub_array as $sub_array_2) {
$list .= "$sub_array_2";
}
} else {
$list .= "$sub_array";
}
}
} else {
$list .= "$array";
}
}
echo "<ul>$list</ul>";