Использование карты массива для создания альтернативы печати r для получения "чистого" вывода


Мне нужен более чистый вывод, чем print_r дает мне

Массив, подобный

$array = array(1,2,3,"four"=>array(4.1,4.2));

Следует распечатать что-то вроде этого

0: 1
1: 2
2: 3
[four]
0: 4.1
1: 4.2

Я придумал это, но array_map не возвращает то, что я ожидал

function print_array($array) {
    $string = "";

    foreach ( $array as $key => $value ) {
        if (is_array ( $value )) {
            $string .= "[" . $key . "]rn" . array_map ( 'print_array', $value );
        } else {
            $string .= $key . ": " . $value . "rn";
        }
    }
    return $string;
}

Выход из этого -

0: 1
1: 2
2: 3
[four]
Array

Мое использование array_map, очевидно, неправильно может кто-нибудь просветить меня?

2 3

2 ответа:

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

<?php 

function print_array($array) {
    $string = "";
    foreach ( $array as $key => $value ) {
        if (is_array ( $value )) {
            $string .= "[" . $key . "]\r\n" . print_array($value );
        } else {
            $string .= $key . ": " . $value . "\r\n";
        }
    }
    return $string;
}

$array = array(1,2,3,"four"=>array(4.1,4.2));
print_r(print_array($array));
?>

Вывод

0: 1
1: 2
2: 3
[four]
0: 4.1
1: 4.2

Этот способ печати на самом деле не нуждается в array_map. Следующая часть использует большую часть вашей собственной функции. Он не проверен, но должен помочь вам в правильном направлении.

function print_array($source) {
    $string = "";
    foreach ($sorce as $key => value) {
        if (is_array($value)) {
            $string .= $key . ": array (\r\n";
            $string .= print_array($value);
            $string .= ")\r\n";
        } else {
            $string .= $key . ": " . $value . "\r\n";
        }
    }

    return $string;
}

echo print_array($myArray);