Печать многомерного массива с использованием одного цикла Foreach

Недавно мне дали интервью, где задавали много вопросов, но был один вопрос, на который я не мог ответить, что было следующим:

Печать многомерного массива с использованием только одного цикла foreach .

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

Интервьюер попросил меня напечатать вышеупомянутый массив, используя только один цикл foreach . Может ли кто-нибудь дать мне ответ на это?

Для этого вы можете использовать рекурсивную функцию. Только один цикл 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); 

Ну вот

 $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; } } 

Вот метод, который не использует даже один цикл 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», который был написан для этих функций, который, конечно же, использует какой-то цикл.

Это может дать вам результат.

 <?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 для перемещения по дочерним массивам.

 foreach($cars as $key=>$car){ echo $car[0]; echo $car[1]; echo $car[2]; } 
 $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>"; }