合并关联数组
本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 15 课,共 68 课。
array_merge() 可以无缝处理索引数组,但处理关联数组时,它的行为会有很大不同。关键区别在于它如何处理待合并数组之间重复的字符串键。
合并关联数组时,如果两个数组都包含相同的字符串键,后一个数组中的值会覆盖前一个数组中的值:
<?php
$defaults = ["theme" => "light", "language" => "english", "notifications" => true];
$userSettings = ["theme" => "dark", "notifications" => false];
$finalConfig = array_merge($defaults, $userSettings);
print_r($finalConfig);
// 输出:Array ( [theme] => dark [language] => english [notifications] => false )
?>注意,“theme”从“light”变成了“dark”,“notifications”从 true 变成了 false,而“language”仍为“english”,因为它没有被覆盖。这种行为使 array_merge() 非常适合配置系统,在这类系统中,你希望用户偏好覆盖默认值。
参数的顺序很重要:函数调用中,后面列出的数组里的值会覆盖前面列出的值。这种覆盖行为只适用于字符串键;数字键始终会像索引数组那样按顺序重新编索引。
挑战
简单你会收到两个输入:一个默认配置数组和一个用户偏好数组,二者都采用 JSON 格式。读取这两个输入,将每个 JSON 字符串转换为关联数组,使用 array_merge() 将它们合并(用户偏好会覆盖默认值),然后使用 print_r() 输出合并后的配置。
输入格式:两行,每行包含一个表示关联数组的 JSON 对象(例如:{"theme":"light","language":"english"})
预期输出:合并后的配置数组,其中用户偏好会覆盖默认值,并使用 print_r() 显示
亲手试试
<?php
// 读取两个 JSON 输入
$defaultConfig = fgets(STDIN);
$userPreferences = fgets(STDIN);
// 将 JSON 字符串转换为关联数组
$defaultArray = (array)json_decode($defaultConfig, true);
$userArray = (array)json_decode($userPreferences, true);
// TODO: 在下方编写代码,合并这两个数组
// 输出合并后的配置
print_r($mergedConfig);
?>这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: PHP 在线编译器