PHP合并数组方法

PHP合并数组方法

引言

合并两个或多个数组是日常开发高频操作。索引数组用array_push或加号,关联数组用array_merge,+号和array_merge在键冲突时行为完全不同,搞混会踩坑。

array_merge 合并

$a = [1, 2];
$b = [3, 4];
$c = array_merge($a, $b);
// [1, 2, 3, 4]

索引数组会重排数字键,关联数组同名键后者覆盖前者。

加号 + 保留原键

$a = ['a' => 1, 'b' => 2];
$b = ['b' => 99, 'c' => 3];
$c = $a + $b;
// ['a'=>1,'b'=>2,'c'=>3]  左侧优先

+号左边数组的键优先,同键不覆盖,保留左侧值。

array_merge vs + 的区别

$a = ['a' => 1];
$b = ['a' => 99];
array_merge($a, $b);  // ['a'=>99] 后者覆盖
$a + $b;              // ['a'=>1]  左侧保留

关联数组合并要谁覆盖谁,选对函数很关键。

数组合并并去重

$all = array_unique(array_merge($a, $b));

合并后去重,适合标签、权限码这类集合。

追加元素到数组

$list[] = 'new';
array_push($list, 'a', 'b');

单元素直接[]追加最简洁,多元素用array_push。

注意事项

  • array_merge会重置数字索引,+号保留原数字键;
  • 关联数组同名键,array_merge后者覆盖,+号左侧优先;
  • 合并大数组注意内存,别在循环里反复merge;
  • array_merge递归合并多维要用array_replace_recursive;
  • 空数组合并不会报错;
  • 合并后记得检查是否都是数组类型再合并。

总结

array_merge合并数组,数字键重排、关联键后者覆盖;+号运算符左侧优先不覆盖。合并去重用array_unique包一层,追加元素直接[]最简洁。注意两者在同名键上的覆盖方向完全相反,多维递归合并用array_replace_recursive,大数组合并注意内存别在循环里反复操作。


emer 发布于  2026-10-21 07:05 

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内层按键取值。掌握这几种就能应对配置、接口数据等绝大多数场景。


emer 发布于  2026-10-19 07:27 
'); })();