是否可以在不使用foreach的情况下循环数组?

时间:2013-08-25 08:34:09

标签: php arrays loops multidimensional-array arraylist

我有一个html数组结构..

我用foreach循环输出这个数组。 (在get_output函数内部)

是否可以在不使用foreach的情况下输出结果?

$schema = array(
    array(
        'tag' => 'div',
        'class' => 'lines',
        array(
            'tag' => 'div',
             array(
                'tag' => 'span',
                'style' => 'margin:10px; padding:10px',
                'key' => '$key-countryname',
            ),
            'key' => '$value-country',
        ),
        array(
            'tag' => 'div',
             array(
                'tag' => 'span',
                'style' => 'margin:10px; padding:10px',
                'key' => '$key-countryname',
            ),
            'key' => '$value-country',
        ),
    )
);

我的功能是使用foreach循环输出结果

function get_output($schema, $t = -2){
    $t++; $tag = ""; $atts = array(); $keys = array(); $code = array();

    foreach($schema as $k => $v){        
        if(is_array($v)){
            $keys[] = get_output($v, $t);
        } else {
            switch($k){
                case "tag": $tag = $v; break;
                case "key": $keys[] = $v; break;
                case "type": break;
                default: $atts[$k] = $v; break;
            }
        }    
    }
    if(0 < $t){ $code[] = "\n".str_repeat("\t", $t); }
    if($tag){
        $code[] = "<$tag"; foreach($atts as $k=>$v){ $code[] = ' '.$k.'="'.$v.'"'; } $code[] = ">";
        $code = array(implode('', $code));
    }
    foreach($keys as $k){ $code[] = $k; } 
    if($tag){
        $code[] = "\n".str_repeat("\t", $t);
        $code[] = '</'.$tag.'>'; 
    }
    //print_r($code);
    return implode("", $code);
}

1 个答案:

答案 0 :(得分:0)

whilefor是完全有效的循环数组方式:

$a = array(1,2,3); // indexed
$b = array(
    'a' => 1,
    'b' => 2,
    'c' => 3
); // associative

echo '$a indexed with "for": <br />';
for ($i = 0; $i < count($a); $i++) {
   echo $a[$i] . '<br />';
}
echo '$a indexed with "while": <br />';
$i = 0; // reset counter
while ($i < count($a)) {
   echo $a[$i] . '<br />';
   $i++;
}

echo '$b assoc with "for": <br />';
for ($i = 0; $i < count($a); $i++) {
   echo key($b) . ' => ' . current($b) . '<br />';
   next($b); // step forward
}
echo '$b assoc with "while": <br />';
reset($b); // rewind array cursor to start
while ($value = current($b)) {
   echo key($b) . ' => ' . $value . '<br />';
   next($b); // step forward
}

另外,正如您已经在第二个代码片段中实现的那样,可以使用递归来循环多维数组(虽然与嵌套循环相比,它会消耗更多内存)