В одной задаче мне понадобилось писать блок поступающего извне JSON-массива в читабельном виде, как минимум, для записи в журнал действий php-скрипта. В моем случае удобочитаемый(human readable) вид сводился к следующему представлению:
Переменная1:[пробел]Значение1
Переменная2:[пробел]Значение2
. . . . . . . . .
ПеременнаяN:[пробел]ЗначениеN
Давайте посмотрим на эту простенькую, но полезную функцию в виде листинга.
Любой код должен иметь смысл, поэтому кратко о ключевых особенностях:
- Рекурсия позволяет обрабатывать массивы любой глубины.
- Отступы улучшают визуальное восприятие вложенности.
- Запись итогового текста происходит через функцию writeLog (именно в этом примере, вы можете выводить куда угодно).
- В результате получается легко читаемый текст, представляющий структуру исходного массива.
// Функция для преобразования JSON массива в читабельный вид
function convertArrayToHumanReadable($array, $indent = '') {
$output = '';
foreach ($array as $key => $value) {
if (is_array($value)) {
// Рекурсивное преобразование, если значение - массив
$output .= $indent . $key . ":\n" . convertArrayToHumanReadable($value, $indent . ' ');
} else {
// Иначе вывести представление как пара ключ : значение
$output .= $indent . $key . ": " . $value . "\n";
}
}
return writeLog($output.PHP_EOL); // как пример, сразу пишем в лог
}
Функция convertArrayToHumanReadable
предназначена для преобразования JSON-массива (в виде PHP-массива) в удобочитаемый текстовый формат с отступами, чтобы визуально показать вложенность данных. Функция принимает два параметра:
$array
— входной массив, который обычно получен из JSON (например, черезjson_decode
).$indent
— строка отступа, по умолчанию пустая, используется для визуального сдвига вложенных элементов.- В начале создаётся пустая строка
$output
для накопления итогового текста. - В цикле
foreach
реализован алгоритм обхода ключей и значений массива:- Если значение
$value
является массивом (is_array
), функция рекурсивно вызывает сама себя, передавая вложенный массив и увеличивая отступ (добавляет два пробела). При этом в$output
добавляется текущий ключ и перенос строки, затем результат рекурсивного вызова — это вложенная структура с дополнительными отступами. - Если значение не массив, то формируется строка с ключом и значением через двоеточие, а также с текущим отступом, и добавляется перенос строки.
- Если значение
- В конце функция возвращает результат вызова
writeLog
— предполагается, что это функция для записи текста в лог или файл. Вместе с текстом добавляется символ переноса строки, обозначая конец записи.
Этот подход особенно полезен для отладки или логирования сложных JSON-структур.
Удачного кодинга!