🥰

PHPの便利技:デバッグ用の関数

2023/01/26に公開

多次元配列を見やすくする関数

開発・デバッグ作業では、 var_dump()print_r() で変数に代入されている値を確認しますが、多次元配列だと確認するのが大変です。

下の関数を使うと、多次元配列が見やすくなりますよ。

//  使い方
include_once('D.php');
D($_POST);
D.php
<?php
function D($value){	//	...
	$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS,)[0];
	echo '<section>';
	echo "<div>{$trace['file']} #{$trace['line']}</div>";
	_value($value);
	echo '</section>';
}

function _value($value){
	//	...
	switch( $type = gettype($value) ){
		case 'NULL':
			echo 'NULL';
			break;
		case 'boolean':
			echo $value ? 'TRUE': 'FALSE';
			break;
		case 'double':
		case 'integer':
			echo $value;
			break;
		case 'string':
			switch( strtolower($value) ){
				case 'null':
				case 'true':
				case 'false':
				case is_int($value):
				case is_numeric($value):
					$value = "'{$value}'";
					break;
			}
			echo $value;
			break;
		case 'array':
			echo _table($value);
			break;
		case 'object':
			var_dump($value);
			break;
		default:
			echo $type;
			var_dump($value);
	}
}

function _table($array){
	//	...
	echo '<table style="border:1px solid black; border-collapse: collapse">';
	foreach( $array as $key => $value ){
		echo '<tr>';
		echo '<th style="border: 1px solid black;">'.$key.'</th>';
		echo '<td style="border: 1px solid black;">';
		switch( gettype($value) ){
			case 'array':
				_table($value);
				break;
			default:
				_value($value);
			break;
		}
		echo '</td>';
		echo '<tr>';
	}
	echo '</table>';
}

Discussion