PHP遍历关联数组
PHP遍历关联数组
引言
关联数组用键名而非数字下标组织数据,配置项、接口返回的JSON转成数组后都是关联数组。遍历要同时拿到键和值,foreach是最常用的方式,不同场景配合array_keys、array_walk更灵活。
foreach取键和值
$user = ['name'=>'刘馨怡','age'=>26,'city'=>'连云港'];
foreach ($user as $key => $value) {
echo "$key: $value\n";
}
$key => $value同时拿到键名和值,最通用。
只取值
foreach ($user as $value) {
echo $value;
}
不需要键名时省略$key。
用键名取单个值
echo $user['name'];
// 判断键是否存在
if (isset($user['email'])) {
echo $user['email'];
}
取单值直接下标访问,先isset避免未定义键报错。
array_keys取所有键
$keys = array_keys($user);
print_r($keys); // ['name','age','city']
需要单独处理键名列表时用。
array_walk回调遍历
array_walk($user, function($value, $key) {
echo "$key => $value";
});
适合把遍历逻辑封装成回调。
二维关联数组遍历
$list = [
['id'=>1,'name'=>'A'],
['id'=>2,'name'=>'B']
];
foreach ($list as $row) {
echo $row['id'].'-'.$row['name'];
}
循环里再按键名取子元素。
注意事项
- foreach不会改变原数组指针,比each安全;
- 遍历中不要随意增删键,可能导致迭代异常;
- 关联数组键名大小写敏感;
- 值可能为null时用array_key_exists判断键是否存在,isset对null返回false;
- 大数组遍历时注意内存,避免在循环内重复计算。
总结
关联数组遍历首选foreach的$key => $value形式,单值直接下标加isset判断,取键名用array_keys,封装逻辑用array_walk,二维数组外层foreach内层按键取值。掌握这几种就能应对配置、接口数据等绝大多数场景。