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()更精确 - 在 CLI 环境中默认带颜色(需配置),但 Web 环境中建议配合
使用,否则格式混乱
'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 // )
Web 调试时避免页面错乱的实用技巧
直接输出大数组容易破坏 HTML 结构,导致样式崩溃或 JS 报错。这不是功能问题,而是呈现方式问题。
立即学习“PHP免费学习笔记(深入)”;
- 务必用
包裹输出(标签本身不保留换行,必须靠) - 敏感环境(如生产)禁用
var_dump(),改用error_log(var_export($arr, true), 3, '/tmp/debug.log') -
debug_backtrace()配合array_slice()可定位到具体哪一层调用产生了异常数组
下标本身没有“怎么看”这个动作——它始终存在,只是不同函数展示粒度不同。真正容易被忽略的是:数字下标自动转换、字符串键的不可见空格、以及 json_encode() 对非 UTF-8 键名的静默丢弃。这些不会报错,但会让 isset($arr['key']) 总是返回 false。











