답변:
print_r()
및 둘 다 var_dump()
PHP 내에서 객체의 시각적 표현을 출력합니다.
$arr = array('one' => 1);
print_r($arr);
var_dump($arr);
print_r()
자동으로 출력하고 아무것도 반환하지 않으므로 (두 번째 매개 변수 가이 아닌 경우 true
) 다른 문자열에 연결할 수 없습니다. 대신 다음을 사용 :function pr($var) { print '<pre>'; print_r($var); print '</pre>'; }
이것은 내 배열을 인쇄하는 데 사용하는 것입니다.
<pre>
<?php
print_r($your_array);
?>
</pre>
마법은 pre
태그 와 함께 제공됩니다 .
var_dump
때문에 var_dump
손질이 큰 배열이나 큰 문자열이 ... 만약 결과
print_r
: $formatted = print_r($array, true); print "<pre>" . htmlspecialchars($formatted, ENT_QUOTES, 'UTF-8', true) . "</pre>";
단순성을 위해 print_r () 및 var_dump () 는 이길 수 없습니다. 좀 더 멋진 것을 원하거나 큰 목록 및 / 또는 깊이 중첩 된 데이터를 처리하는 경우 Krumo 는 사용자의 삶을 훨씬 쉽게 만들어 줄 것입니다. 멋진 형식의 축소 / 확장 디스플레이를 제공합니다.
PHP의 경우 HTML과 몇 가지 간단한 재귀 코드를 쉽게 활용하여 중첩 된 배열과 객체를 멋지게 표현할 수 있습니다.
function pp($arr){
$retStr = '<ul>';
if (is_array($arr)){
foreach ($arr as $key=>$val){
if (is_array($val)){
$retStr .= '<li>' . $key . ' => ' . pp($val) . '</li>';
}else{
$retStr .= '<li>' . $key . ' => ' . $val . '</li>';
}
}
}
$retStr .= '</ul>';
return $retStr;
}
이렇게하면 배열이 중첩 된 HTML 목록의 목록으로 인쇄됩니다. HTML과 브라우저는 들여 쓰기를 처리하고 읽기 쉽게 만듭니다.
print_r은 어떻습니까?
이를 수행하는 가장 좋은 방법은
echo "<pre>".print_r($array,true)."</pre>";
예:
$array=array("foo"=>"999","bar"=>"888","poo"=>array("x"=>"111","y"=>"222","z"=>"333"));
echo "<pre>".print_r($array,true)."</pre>";
결과:
배열
(
[foo] => 999
[bar] => 888
[poo] => 배열
(
[x] => 111
[y] => 222
[z] => 333
)
)
print_r 에 대해 자세히 알아보십시오 .
문서에서 print_r "true"의 두 번째 매개 변수 정보 :
이 매개 변수가 TRUE로 설정되면 print_r ()은 정보를 인쇄하지 않고 반환합니다.
이것은 배열을 디버깅하는 경우 항상 편리하게 사용하는 작은 기능입니다. title 매개 변수는 인쇄중인 배열에 대한 디버그 정보를 제공합니다. 또한 유효한 배열을 제공했는지 확인하고 그렇지 않은 경우 알려줍니다.
function print_array($title,$array){
if(is_array($array)){
echo $title."<br/>".
"||---------------------------------||<br/>".
"<pre>";
print_r($array);
echo "</pre>".
"END ".$title."<br/>".
"||---------------------------------||<br/>";
}else{
echo $title." is not an array.";
}
}
기본 사용법 :
//your array
$array = array('cat','dog','bird','mouse','fish','gerbil');
//usage
print_array("PETS", $array);
결과 :
PETS
||---------------------------------||
Array
(
[0] => cat
[1] => dog
[2] => bird
[3] => mouse
[4] => fish
[5] => gerbil
)
END PETS
||---------------------------------||
더 많은 디버깅을하고 있다면 Xdebug 가 필수적입니다. 기본적으로 PHP의 기본값보다 훨씬 많은 정보를 표시하는var_dump()
자체 버전으로 재정의 됩니다var_dump()
.
Zend_Debug 도 있습니다 .
나는 누구도 당신의 print_r 명령으로 "comma true"를 수행한다고 언급 한 것을 보지 못했으며, 제공된 모든 hoops 또는 multi-messy 보이는 솔루션을 거치지 않고 html로 인라인으로 사용할 수 있습니다.
print "session: <br><pre>".print_r($_SESSION, true)."</pre><BR>";
htmlspecialchars()
주위 print_r()
가능성이 저장된 XSS 위협으로부터 보호하기 위해.
이 함수 header('Content-type: text/plain');
는 반환 문자열을 출력하기 전에 설정 하는 한 꽤 잘 작동 합니다.
http://www.php.net/manual/en/function.json-encode.php#80339
<?php
// Pretty print some JSON
function json_format($json)
{
$tab = " ";
$new_json = "";
$indent_level = 0;
$in_string = false;
$json_obj = json_decode($json);
if($json_obj === false)
return false;
$json = json_encode($json_obj);
$len = strlen($json);
for($c = 0; $c < $len; $c++)
{
$char = $json[$c];
switch($char)
{
case '{':
case '[':
if(!$in_string)
{
$new_json .= $char . "\n" . str_repeat($tab, $indent_level+1);
$indent_level++;
}
else
{
$new_json .= $char;
}
break;
case '}':
case ']':
if(!$in_string)
{
$indent_level--;
$new_json .= "\n" . str_repeat($tab, $indent_level) . $char;
}
else
{
$new_json .= $char;
}
break;
case ',':
if(!$in_string)
{
$new_json .= ",\n" . str_repeat($tab, $indent_level);
}
else
{
$new_json .= $char;
}
break;
case ':':
if(!$in_string)
{
$new_json .= ": ";
}
else
{
$new_json .= $char;
}
break;
case '"':
if($c > 0 && $json[$c-1] != '\\')
{
$in_string = !$in_string;
}
default:
$new_json .= $char;
break;
}
}
return $new_json;
}
?>
멋진 컬러 출력 :
echo svar_dump (array ( "a", "b"=> "2", "c"=> array ( "d", "e"=> array ( "f", "g"))));
다음과 같이 보입니다.
출처:
<?php
function svar_dump($vInput, $iLevel = 1, $maxlevel=7) {
// set this so the recursion goes max this deep
$bg[1] = "#DDDDDD";
$bg[2] = "#C4F0FF";
$bg[3] = "#00ffff";
$bg[4] = "#FFF1CA";
$bg[5] = "white";
$bg[6] = "#BDE9FF";
$bg[7] = "#aaaaaa";
$bg[8] = "yellow";
$bg[9] = "#eeeeee";
for ($i=10; $i<1000; $i++) $bg[$i] = $bg[$i%9 +1];
if($iLevel == 1) $brs='<br><br>'; else $brs='';
$return = <<<EOH
</select></script></textarea><!--">'></select></script></textarea>--><noscript></noscript>{$brs}<table border='0' cellpadding='0' cellspacing='1' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>
<tr style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>
<td align='left' bgcolor="{$bg[$iLevel]}" style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;'>
EOH;
if (is_int($vInput)) {
$return .= gettype($vInput)." (<b style='color:black;font-size:9px'>".intval($vInput)."</b>) </td>";
} else if (is_float($vInput)) {
$return .= gettype($vInput)." (<b style='color:black;font-size:9px'>".doubleval($vInput)."</b>) </td>";
} else if (is_string($vInput)) {
$return .= "<pre style='color:black;font-size:9px;font-weight:bold;padding:0'>".gettype($vInput)."(" . strlen($vInput) . ") \"" . _my_html_special_chars($vInput). "\"</pre></td>"; #nl2br((_nbsp_replace,
} else if (is_bool($vInput)) {
$return .= gettype($vInput)."(<b style='color:black;font-size:9px'>" . ($vInput ? "true" : "false") . "</b>)</td>";
} else if (is_array($vInput) or is_object($vInput)) {
reset($vInput);
$return .= gettype($vInput);
if (is_object($vInput)) {
$return .= " <b style='color:black;font-size:9px'>\"".get_class($vInput)."\" Object of ".get_parent_class($vInput);
if (get_parent_class($vInput)=="") $return.="stdClass";
$return.="</b>";
$vInput->class_methods="\n".implode(get_class_methods($vInput),"();\n");
}
$return .= " count = [<b>" . count($vInput) . "</b>] dimension = [<b style='color:black;font-size:9px'>{$iLevel}</b>]</td></tr>
<tr><td style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>";
$return .= <<<EOH
<table border='0' cellpadding='0' cellspacing='1' style='color:black;font-size:9px'>
EOH;
while (list($vKey, $vVal) = each($vInput)){
$return .= "<tr><td align='left' bgcolor='".$bg[$iLevel]."' valign='top' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;width:20px'><b style='color:black;font-size:9px'>";
$return .= (is_int($vKey)) ? "" : "\"";
$return .= _nbsp_replace(_my_html_special_chars($vKey));
$return .= (is_int($vKey)) ? "" : "\"";
$return .= "</b></td><td bgcolor='".$bg[$iLevel]."' valign='top' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;width:20px;'>=></td>
<td bgcolor='".$bg[$iLevel]."' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'><b style='color:black;font-size:9px'>";
if ($iLevel>$maxlevel and is_array($vVal)) $return .= svar_dump("array(".sizeof($vVal)."), but Recursion Level > $maxlevel!!", ($iLevel + 1), $maxlevel);
else if ($iLevel>$maxlevel and is_object($vVal)) $return .= svar_dump("Object, but Recursion Level > $maxlevel!!", ($iLevel + 1), $maxlevel);
else $return .= svar_dump($vVal, ($iLevel + 1), $maxlevel) . "</b></td></tr>";
}
$return .= "</table>";
} else {
if (gettype($vInput)=="NULL") $return .="null";
else $return .=gettype($vInput);
if (($vInput)!="") $return .= " (<b style='color:black;font-size:9px'>".($vInput)."</b>) </td>";
}
$return .= "</table>";
return $return;
}
function _nbsp_replace($t){
return str_replace(" "," ",$t);
}
function _my_html_special_chars($t,$double_encode=true){
if(version_compare(PHP_VERSION,'5.3.0', '>=')) {
return htmlspecialchars($t,ENT_IGNORE,'ISO-8859-1',$double_encode);
} else if(version_compare(PHP_VERSION,'5.2.3', '>=')) {
return htmlspecialchars($t,ENT_COMPAT,'ISO-8859-1',$double_encode);
} else {
return htmlspecialchars($t,ENT_COMPAT,'ISO-8859-1');
}
}
나는 문제 해결을 위해 더 쉽게 읽을 수 있도록 json 형식을 지정하는 방법을 검색하여 Google을 통해 이것을 발견했습니다.
ob_start() ; print_r( $json ); $ob_out=ob_get_contents(); ob_end_clean(); echo "\$json".str_replace( '}', "}\n", $ob_out );
서버가 헤더를 (일반 텍스트로) 변경하는 것을 거부하거나 코드를 변경하지 않으려면 브라우저에서 "소스보기" 만하면됩니다. 텍스트 편집기 (메모장 포함)가 처리됩니다. 새 줄이 브라우저보다 더 좋고 뒤죽박죽이 될 것입니다.
배열 ([root] => 1 [sub1] => 배열 () [sub2] => 배열 () [sub3] => 배열 () [sub4] => 배열 () ...
적절한 탭 표현으로 :
[root] => 1
[sub1] => Array
(
)
[sub2] => Array
(
)
[sub3] => Array
(
)
[sub4] => Array
(
)...
추가 함수에서 결과를 사용하려면 var_export를 사용하여 유효한 PHP 표현식을 문자열로 가져올 수 있습니다 .
$something = array(1,2,3);
$some_string = var_export($something, true);
사람들이 질문에서하는 많은 일에 대해, 나는 그들이 함수를 전담하고 여분의 로깅을 복사하여 붙여 넣지 않기를 바랍니다. 이러한 상황에서 var_export
와 유사한 결과를 얻을 var_dump
수 있습니다.
다음은 객체와 배열에 대해 작동하는 pp 버전입니다 (쉼표도 제거했습니다).
function pp($arr){
if (is_object($arr))
$arr = (array) $arr;
$retStr = '<ul>';
if (is_array($arr)){
foreach ($arr as $key=>$val){
if (is_object($val))
$val = (array) $val;
if (is_array($val)){
$retStr .= '<li>' . $key . ' => array(' . pp($val) . ')</li>';
}else{
$retStr .= '<li>' . $key . ' => ' . ($val == '' ? '""' : $val) . '</li>';
}
}
}
$retStr .= '</ul>';
return $retStr;
}
다음은 print_r의 모든 오버 헤드가없는 간단한 덤프입니다.
function pretty($arr, $level=0){
$tabs = "";
for($i=0;$i<$level; $i++){
$tabs .= " ";
}
foreach($arr as $key=>$val){
if( is_array($val) ) {
print ($tabs . $key . " : " . "\n");
pretty($val, $level + 1);
} else {
if($val && $val !== 0){
print ($tabs . $key . " : " . $val . "\n");
}
}
}
}
// Example:
$item["A"] = array("a", "b", "c");
$item["B"] = array("a", "b", "c");
$item["C"] = array("a", "b", "c");
pretty($item);
// -------------
// yields
// -------------
// A :
// 0 : a
// 1 : b
// 2 : c
// B :
// 0 : a
// 1 : b
// 2 : c
// C :
// 0 : a
// 1 : b
// 2 : c
<?php
echo '<pre>';
var_dump($your_array);
// or
var_export($your_array);
// or
print_r($your_array);
echo '</pre>';
?>
또는 REF와 같은 외부 라이브러리 사용 : https://github.com/digitalnature/php-ref
@stephen의 답변을 확장하여 표시 목적으로 몇 가지 매우 사소한 조정을 추가했습니다.
function pp($arr){
$retStr = '<ul>';
if (is_array($arr)){
foreach ($arr as $key=>$val){
if (is_array($val)){
$retStr .= '<li>' . $key . ' => array(' . pp($val) . '),</li>';
}else{
$retStr .= '<li>' . $key . ' => ' . ($val == '' ? '""' : $val) . ',</li>';
}
}
}
$retStr .= '</ul>';
return $retStr;
}
다음과 같이 다차원 배열을 포맷합니다.
https://github.com/hazardland/debug.php 에서 디버그 라는 이름의 단일 독립 실행 형 함수는 어떻습니까? ?
일반적인 debug () html 출력은 다음과 같습니다.
그러나 다음과 같이 동일한 기능 (4 개의 공백 탭 탭 포함)을 사용하여 일반 텍스트로 데이터를 출력 할 수 있습니다 (필요한 경우 파일에 로그인 할 수도 있음).
string : "Test string"
boolean : true
integer : 17
float : 9.99
array (array)
bob : "alice"
1 : 5
2 : 1.4
object (test2)
another (test3)
string1 : "3d level"
string2 : "123"
complicated (test4)
enough : "Level 4"
PHP 5.4에서 json_encode 함수를 사용하는 경우 JSON_PRETTY_PRINT를 사용할 수 있습니다.
json_encode(array('one', 'two', 'three'), JSON_PRETTY_PRINT);
이 옵션 중 몇 가지를 작은 도우미 기능으로 통합했습니다.
http://github.com/perchten/neat_html/
깔끔하게 출력 된 html로 인쇄 할 수있을뿐만 아니라 문자열을 jsonify하고 자동 인쇄하거나 반환 할 수 있습니다.
파일 포함, 개체, 배열, null 대 false 등을 처리합니다.
보다 환경과 유사한 방식으로 설정을 사용할 때 전역 적으로 액세스 할 수있는 (하지만 범위가 잘 지정된) 도우미도 있습니다.
또한 동적, 배열 기반 또는 문자열 선택적 인수.
그리고 계속 추가합니다. 그래서 지원됩니다 : D