- 使用數(shù)組+運算符
合并數(shù)組的最簡單方法是使用+運算符鳖目。
// 在兩個索引數(shù)組上使用+運算符
$frontend = ['Vue', 'React'];
$backend = ['PHP', 'Java', 'Python'];
$classes = $frontend + $backend;
echo '<pre>';
// 結(jié)果數(shù)組只包含三個元素矮燎,而不是五個元素。
// 這是因為+運算符沒有將第二個數(shù)組連接到第一個數(shù)組的末尾
// 對于索引數(shù)組俄认,+運算符會忽略第二個數(shù)組中與第一個數(shù)組具有相同索引的元素
print_r($classes);
echo '</pre>';
// 通過+運算符合并兩個關聯(lián)數(shù)組
$frontend = ['Vue' => '漸進式 JavaScript 框架', 'React' => '用于構(gòu)建 Web 和原生交互界面的庫'];
$backend = ['PHP' => 'Hypertext Preprocessor', 'Java' => 'Write Once, Run Anywhere', 'Python' => 'Life is short, use Python'];
$languages = $frontend + $backend;
echo '<pre>';
// 兩個數(shù)組都包含一組唯一的鍵佩憾,因此生成的數(shù)組包含每個元素及其關聯(lián)鍵
print_r($languages);
echo '</pre>';
// 當存在重復的鍵時,+運算符會忽略第二個數(shù)組中的元素
$frontend = ['Vue' => '漸進式 JavaScript 框架', 'React' => '用于構(gòu)建 Web 和原生交互界面的庫', 'Node' => '一個跨平臺的 JavaScript 運行時環(huán)境'];
$backend = ['PHP' => 'Hypertext Preprocessor', 'Java' => 'Write Once, Run Anywhere', 'Python' => 'Life is short, use Python', 'Node' => '服務器端的 JavaScript 運行環(huán)境'];
$languages = $frontend + $backend;
echo '<pre>';
// 第二個數(shù)組中的 Node 被忽略亮蒋,因為它的鍵重復
print_r($languages);
echo '</pre>';
- 使用 array_merge() 和 array_merge_recursive() 函數(shù)
# 函數(shù) array_merge() 和array_merge recursive()連接兩個或多個數(shù)組以創(chuàng)建新數(shù)組副编。
# 它們之間的區(qū)別在于它們處理關聯(lián)數(shù)組中重復值的方式负甸。
# 處理索引數(shù)組時,array_merge() 函數(shù)會自動對每個元素的索引重新編號痹届,并包含每個值呻待,包括重復項。
$frontend = ['Vue', 'React', 'Node'];
$backend = ['PHP', 'Java', 'Python', 'Node'];
$languages = array_merge($frontend, $backend);
echo '<pre>';
// 索引是連續(xù)編號的短纵,重復值保留在結(jié)果數(shù)組中
print_r($languages);
echo '</pre>';
# 處理關聯(lián)數(shù)組時带污,array_merge() 函數(shù)的行為依賴于是否存在重復的數(shù)組鍵
# 當沒有重復項時,array_merge() 函數(shù)以與+運算符完全相同的方式連接關聯(lián)數(shù)組
$frontend = ['Vue' => '漸進式 JavaScript 框架', 'React' => '用于構(gòu)建 Web 和原生交互界面的庫'];
$backend = ['PHP' => 'Hypertext Preprocessor', 'Java' => 'Write Once, Run Anywhere', 'Python' => 'Life is short, use Python'];
$languages = array_merge($frontend, $backend);
echo '<pre>';
print_r($languages);
echo '</pre>';
# 當存在重復的數(shù)組鍵時香到,array_merge() 函數(shù)會導致只保留最后一個重復的值
$frontend = ['Vue' => '漸進式 JavaScript 框架', 'React' => '用于構(gòu)建 Web 和原生交互界面的庫', 'Node' => '一個跨平臺的 JavaScript 運行時環(huán)境'];
$backend = ['PHP' => 'Hypertext Preprocessor', 'Java' => 'Write Once, Run Anywhere', 'Python' => 'Life is short, use Python', 'Node' => '服務器端的 JavaScript 運行環(huán)境'];
$languages = array_merge($frontend, $backend);
echo '<pre>';
print_r($languages);
echo '</pre>';
數(shù)組的合并順序不同于+運算符鱼冀。+運算符保留第一個重復值,而 array_merge() 函數(shù)保留最后一個重復值悠就。
# 要保留重復鍵的值千绪,需要使用 array_merge_recursive() 函數(shù)
$frontend = ['Vue' => '漸進式 JavaScript 框架', 'React' => '用于構(gòu)建 Web 和原生交互界面的庫', 'Node' => '一個跨平臺的 JavaScript 運行時環(huán)境'];
$backend = ['PHP' => 'Hypertext Preprocessor', 'Java' => 'Write Once, Run Anywhere', 'Python' => 'Life is short, use Python', 'Node' => '服務器端的 JavaScript 運行環(huán)境'];
$languages = array_merge_recursive($frontend, $backend);
echo '<pre>';
// 重復鍵的值將合并到索引子數(shù)組中
print_r($languages);
echo '</pre>';
+運算符、array_merge() 函數(shù)和 array_merge_recursive() 函數(shù)可處理兩個以上的數(shù)組梗脾。關于重復鍵和值的規(guī)則是相同的荸型。對于 array_merge() 函數(shù),它始終是保留最后一個重復的值炸茧。
- 將兩個索引數(shù)組合并為關聯(lián)數(shù)組
# array_combine() 函數(shù)將兩個索引數(shù)組合并為一個關聯(lián)數(shù)組瑞妇,第一個數(shù)組用作鍵,第二個數(shù)組用作值。
# 兩個數(shù)組的元素數(shù)量必須相同梭冠。否則辕狰,函數(shù)返回 false 并觸發(fā)警告。
$colors = ['red', 'yellow', 'green'];
$actions = ['stop', 'wait', 'go'];
$signal = array_combine($colors, $actions);
echo '<pre>';
print_r($signal );
echo '</pre>';