让我们假设您有一个多维数组,并假设它赢了:
foreach ($Call as $key => $value) {
echo "1.".(is_array($value) ? $key : $value)."<br>";
if(is_array($value)){
foreach ($value as $key => $value) {
echo "a.".(is_array($value) ? $key : $value)."<br>";
if(is_array($value)){
foreach ($value as $key => $value) {
echo "A.".(is_array($value) ? $key : $value)."<br>";
}
}
}
}
}
你如何回应数组中的每个Foo,Bar和Baz?由于Foo2的设置键为0,我特别遇到问题,因此我需要以某种方式解决在非关键值上设置的键。
我目前的解决方案虽然有效但感觉太骗了,并且想知道是否有更简洁的方法来循环播放阵列:
DEFAULT
答案 0 :(得分:1)
对于使用递归的干净代码,我有以下解决方案。
$Call= array("Foo1" => array("Bar1" => array("Baz1", "Baz2")), "Foo2", "Foo3" => array("Bar2", "Bar3"));
cleanloop($Call);
function cleanloop($arr){
foreach($arr as $key => $value){
if(is_array($value)){
echo $key . "<br/>";
cleanloop($value);
}else{
echo $value . "<br/>";
}
}
}
我希望通过更多的努力,可以管理列表/编号。在编号中使用html buitl我可以像
一样更新function cleanloop($arr){
echo "<ol>";
foreach($arr as $key => $value){
if(is_array($value)){
echo "<li>";
echo $key;
cleanloop($value);
echo "</li>";
}else{
echo "<li>" . $value . "</li>";
}
}
echo "</ol>";
}
答案 1 :(得分:1)
这是一个品味问题,但我不喜欢递归。
SPL iterators提供您所需要的一切:
<?php
$Call = array(
"Foo1" => array(
"Bar1" => array(
"Baz1",
"Baz2"
)
),
"Foo2",
"Foo3" => array(
"Bar2",
"Bar3"
)
);
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($Call), RecursiveIteratorIterator::SELF_FIRST);
for ($iterator->rewind(); $iterator->valid(); $iterator->next()) {
echo 'Depth: ';
echo $iterator->getDepth();
echo ' Key: ';
echo $iterator->key();
echo ' Content: ';
echo is_array($iterator->current()) ? 'Array' : $iterator->current();
echo '; ' . PHP_EOL;
}
请查看constructor of the RecursiveIteratorIterator。它提供了一些有用的标志。