Menu

PHP var_dump()와 print_r(): 배열 출력과 디버깅

print_r($array)는 배열을 읽기 쉬운 형태로 출력하고, var_dump($value)는 모든 타입과 길이까지 보여 주며, var_export는 올바른 PHP 코드를 출력합니다. 각각을 언제 쓰는지, print_r를 문자열로 받는 방법, HTML에서 <pre>로 보기 좋게 출력하는 방법을 알아봅니다.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

print_r($array)는 배열이나 객체를 키와 값과 함께 읽기 쉬운 형태로 출력합니다. var_dump($value)는 같은 구조에 모든 값의 타입과 길이를 더해 출력합니다. 배열에 무엇이 있는지 볼 때는 print_r를, 값이 "1"인지 1인지 알아야 할 때는 var_dump를 쓰세요.

admin에 대한 두 출력을 비교해 보세요. print_r는 화살표 뒤에 아무것도 출력하지 않았고, var_dump는 bool(false)를 출력했습니다. 디버깅할 때 var_dump를 쓰는 주된 이유가 이 차이입니다.

print_r, var_dump, var_export 비교

세 함수는 같은 데이터를 서로 다른 상세함으로 보여 줍니다.

print_rvar_dumpvar_export
타입 표시아니요예PHP 리터럴로
false, null, ""아무것도 출력 안 함bool(false), NULL, string(0) ""false, NULL, ''
문자열 반환 가능print_r($x, true)아니요var_export($x, true)
출력이 올바른 PHP아니요아니요예
한 번 호출로 여러 값아니요var_dump($a, $b)아니요

print_r는 가장 읽기 쉽고, var_dump는 가장 정확하며, var_export는 파일에 다시 붙여 넣을 수 있는 코드를 줍니다.

print_r 출력을 문자열로 얻기

두 번째 인수로 true를 넘기면 print_r는 출력하는 대신 텍스트를 반환합니다. 배열을 로그 파일에 쓰거나 더 큰 메시지 안에 넣는 방법입니다.

var_export($value, true)도 같은 방식으로 문자열을 반환합니다. var_dump는 항상 출력하므로 캡처하려면 출력 버퍼링이 필요합니다: ob_start(); var_dump($x); $text = ob_get_clean();.

HTML에서 pre로 배열 보기 좋게 출력하기

브라우저에서는 HTML이 공백을 무시하므로 print_r의 줄바꿈과 공백이 긴 한 줄로 합쳐집니다. 레이아웃을 유지하려면 출력을 <pre>로 감싸세요. 실행하고 Page 탭을 보세요.

사용자 입력처럼 데이터에 <나 &가 들어갈 수 있다면 htmlspecialchars가 중요합니다. 없으면 브라우저가 그 텍스트를 HTML로 취급합니다. JavaScript나 API로 보내는 데이터라면 json_encode 형태가 가장 유용한 경우가 많습니다.

여러 값을 한 번에 덤프하기

var_dump는 인수를 몇 개든 받아 차례로 출력하므로 두 값을 나란히 비교할 때 빠릅니다.

출력을 보면 ==는 같다고 하고 ===는 아니라고 하는 이유가 보입니다. 하나는 string(2) "42"이고 다른 하나는 int(42)입니다.

객체 출력하기

세 함수 모두 객체도 출력합니다. var_dump와 print_r는 private과 protected 속성을 표시하므로([label:Point:private]) 속성이 없어진 것처럼 보일 때 도움이 됩니다.

var_dump 출력의 #1은 객체의 id입니다. 같은 id를 보여 주는 두 변수는 같은 객체를 가리킵니다.

흔한 실수: 배열을 echo하기

echo는 인수를 문자열로 바꿉니다. 배열에는 문자열 형태가 없으므로 PHP는 Array라는 단어를 출력하고 경고를 냅니다.

<?php
$colors = ["red", "green", "blue"];
echo $colors;

PHP는 다음을 출력합니다.

Warning: Array to string conversion in /home/index.php on line 3
Array

위의 함수 중 하나로 내용을 출력하거나 값을 직접 합치세요.

implode는 사용자에게 목록을 보여 줄 때, json_encode는 로그와 API에, print_r나 var_dump는 직접 디버깅할 때 쓰세요.

자주 묻는 질문

var_dump와 print_r의 차이는 무엇인가요?

print_r는 키와 값을 짧고 읽기 쉬운 형태로 보여 줍니다. var_dump는 string(3) "Ada", bool(false)처럼 각 값의 타입과 길이도 보여 주므로 타입이 중요할 때 씁니다. print_r(false)는 아무것도 출력하지 않고, var_dump(false)는 bool(false)를 출력합니다.

print_r의 출력을 문자열로 얻으려면 어떻게 하나요?

두 번째 인수로 true를 넘기세요. $text = print_r($array, true);는 출력하는 대신 텍스트를 반환하므로 error_log($text)로 로그에 쓰거나 변수에 넣을 수 있습니다. var_export($value, true)도 같은 방식으로 동작하며, var_dump에는 그런 옵션이 없습니다.

브라우저에서 배열을 보기 좋게 출력하려면 어떻게 하나요?

브라우저가 줄바꿈과 들여쓰기를 유지하도록 출력을 <pre> 태그로 감싸세요: echo '<pre>' . print_r($array, true) . '</pre>';. 데이터에 HTML이 들어갈 수 있다면 htmlspecialchars로 이스케이프하세요.

배열을 echo하면 Array가 출력되는 이유는 무엇인가요?

echo는 인수를 문자열로 바꾸는데, 배열은 "Array to string conversion" 경고와 함께 Array라는 단어로 바뀝니다. 내용을 출력하려면 print_r, var_dump, implode(', ', $arr), json_encode($arr)를 쓰세요.

PHP에서 var_export는 무엇을 하나요?

값을 array ( 0 => 'a', )처럼 스크립트에 다시 붙여 넣을 수 있는 올바른 PHP 코드로 출력합니다. 두 번째 인수로 true를 주면 코드를 문자열로 반환하며, 일부 도구는 이렇게 캐시된 설정 파일을 씁니다.

Coddy 프로그래밍 언어 일러스트

Coddy로 코딩 배우기

시작하기