仅使用一个Foreach循环打印多维数组

时间:2016-02-17 09:30:46

标签: php arrays foreach

最近我接受了一个很多问题的采访,但有一个我无法回答的问题是:

仅使用一个foreach循环打印多维数组。

$cars = array (  
    array("Volvo",22,18), 
    array("BMW",15,13),
    array("Saab",5,2),
    array("Land Rover",17,15) 
);

采访者让我只使用一个foreach循环打印上面的数组。有人可以给我答案吗?

6 个答案:

答案 0 :(得分:2)

您可以使用递归函数。只有一个foreach循环以递归方式调用。

$cars = array(array("Volvo",22,18),array("BMW",15,13),array("Saab",5,2),array("Land Rover",17,15));

function displayArr($arr) {
    foreach($arr as $key => $value) {
        if(is_array($value)) {
            displayArr($value);
            echo "<br>";
        }
        else {
            echo $value . " . ";
        }
    }
}

displayArr($cars);

答案 1 :(得分:1)

你去吧

$cars = array (  array("Volvo",22,18), array("BMW",15,13),array("Saab",5,2), array("Land Rover",17,15) );

foreach($cars as $car) {
    print("Name: ".$car[0]."\n");
    print("Number 1: ".$car[1]."\n");
    print("Number 2: ".$car[2]."\n");
}

显然可以检查是否设置了内部数组中的其他键。但似乎你的数组将始终包含所有键。

编辑:

根据您留下的评论,您希望尽可能保持动态,以便您需要使用递归或goto控制结构。

$cars = array (  array("Volvo",22,18), array("BMW",15,13),array("Saab",5,2), array("Land Rover",17,15) );

foreach($cars as $car) {
    $count = 0;

    A:
    if(isset($car[$count])) {
        print($car[$count] . "\n");
        $count +=1;
        goto A;
    }
}

答案 2 :(得分:0)

$cars = array (
    array("Volvo",22,18), 
    array("BMW",15,13),
    array("Saab",5,2),
    array("Land Rover",17,15) 
);

foreach($cars as $car){
    echo "<pre>";
    print_r($car);
    echo "</pre>";
}

答案 3 :(得分:0)

这可以给你结果。

<?php
$cars = array (  array("Volvo",22,18), array("BMW",15,13),array("Saab",5,2), array("Land Rover",17,15) );

array_map('fun', $cars);
function fun($cars){
    foreach($cars as $car){
        echo $car."<br />";
    }
}
?>

输出

Volvo 22 18 BMW 15 13 Saab 5 2 Land Rover 17 15

使用array_map遍历子数组。

答案 4 :(得分:0)

这是一种甚至不使用foreach循环

的方法
function walk2($item, $key)
{
    echo $key . ' - ' . $item.PHP_EOL;
}

function walk1($car, $key)
{
    array_walk($car, 'walk2');
    echo '------'.PHP_EOL;
}

array_walk($cars, 'walk1');

给出输出:

0 - Volvo
1 - 22
2 - 18
------
0 - BMW
1 - 15
2 - 13
------
0 - Saab
1 - 5
2 - 2
------
0 - Land Rover
1 - 17
2 - 15
------

虽然可能这个问题应该让你提出有关数组构成的逻辑问题,这样他们就可以测试你的分析技能,就像你跳过编码箍一样。

此外,即使您没有使用foreach或任何其他循环,您也正在使用为这些函数编写的“C”代码,当然这些代码正在使用某种循环。

答案 5 :(得分:0)

foreach($cars as $key=>$car){
    echo $car[0];
    echo $car[1];
    echo $car[2];
}