print_r()最常用,清晰展示数组键、值、嵌套和类型;var_dump()精确显示类型与下标细节;array_keys()轻量提取所有下标;Web调试需用包裹以防错乱。
print_r() 快速看数组下标和结构开发时最常用、最直接的方式就是 print_r(),它能清晰展示数组的键(下标)、值、嵌套层级和数据类型(如 Array、string、int)。
"name"、"id");对索引数组,显示数字下标(如 0、1)true 可返回字符串而非直接输出,适合写入日志:print_r($arr, true)
NULL 值的键,也不区分 0 和 "0"(两者都显示为 0 =>)print_r(['a' => 'apple', 'b' => ['x' => 10]]); // 输出: // Array // ( // [a] => apple // [b] => Array // ( // [x] => 10 // ) // )
var_dump() 查看真实类型和下标细节当怀疑下标是字符串 "0" 还是整数 0,或需要确认 null、bool、引用等细节时,var_ 是唯一可靠选择。它会明确标出类型和长度。
dump()
int(0),字符串下标显示为 string(1) "0"
array(0) { },比 print_r() 更精确 使用,否则格式混乱'zero', "0" => 'zero_str']); ?>// 输出(关键行): // [0] => string(4) "zero" // ["0"] => string(8) "zero_str"用
array_keys()单独提取所有下标当你只关心“有哪些下标”,不关心值内容时,
array_keys()最轻量。尤其适合调试键名拼写错误、意外多出空格或不可见字符的场景。
array_keys($arr, null))array_map('urlencode', array_keys($arr)) 可快速检查是否有 URL 不友好字符$arr = [' name' => 'alice', 'age' => 30]; print_r(array_keys($arr)); // 输出: // Array // ( // [0] => name // [1] => age // )
直接输出大数组容易破坏 HTML 结构,导致样式崩溃或 JS 报错。这不是功能问题,而是呈现方式问题。
包裹输出( 标签本身不保留换行,必须靠 )
var_dump(),改用 error_log(var_export($arr, true), 3, '/tmp/debug.log')
debug_backtrace() 配合 array_slice() 可定位到具体哪一层调用产生了异常数组下标本身没有“怎么看”这个动作——它始终存在,只是不同函数展示粒度不同。真正容易被忽略的是:数字下标自动转换、字符串键的不可见空格、以及 json_encode() 对非 UTF-8 键名的静默丢弃。这些不会报错,但会让 isset($arr['key']) 总是返回 false。