
php 关联数组默认不支持直接用数字索引(如 `$arr[0]`)访问,但可通过 `array_values()` 提取值序列后实现按序索引访问。
在 PHP 中,关联数组(如 ["name" => "John", "age" => 33])的键是字符串,其内部存储虽保持插入顺序(自 PHP 7.4 起严格保证),但语法上不支持 $marr[0] 这类数字下标访问——这会触发 Undefined offset: 0 错误,因为 PHP 不会自动将键名映射为整数索引。
要实现“按插入顺序获取第 N 个值”,正确做法是先用 array_values() 提取纯数值索引数组,再通过数字下标访问:
$marr = [
"name" => "John",
"age" => 33
];
// 安全获取第一个值("John")
$value = array_values($marr)[0];
echo $value; // 输出:John
// 获取第二个值(33)
$value2 = array_values($marr)[1];
echo $value2; // 输出:33✅ 关键说明:
- array_values() 返回一个新数组,其键被重置为从 0 开始的连续整数,值顺序与原数组插入顺序完全一致(PHP 官方文档明确保证此行为);
- 该方法适用于只关心值顺序、无需原始键名的场景;
- 若需同时获取键和值,可结合 array_keys() 使用:
$keys = array_keys($marr); // ["name", "age"] $values = array_values($marr); // ["John", 33] echo $keys[0] . ': ' . $values[0]; // name: John
⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 避免在循环中反复调用 array_values($marr)[i] —— 每次都会重建数组,影响性能;建议先缓存结果:
$vals = array_values($marr); for ($i = 0; $i < count($vals); $i++) { echo $vals[$i] . "\n"; } - 若数组可能为空,务必检查索引有效性,防止越界:
$vals = array_values($marr); if (!empty($vals)) { echo $vals[0]; }
总结:PHP 关联数组本身无内置数字索引,但 array_values() 是标准、可靠且语义清晰的解决方案,兼顾可读性与兼容性(支持 PHP 4.0+)。











