在PHP 中,我們經常會需要構造複雜的多維數組。通過PHP 內建的函數array_fill()和array_merge() ,我們可以高效地完成這一任務。今天,我們就來探討如何使用這兩個函數來快速構造複雜的多維數組。
array_fill()函數用於創建一個數組,並將每個元素都填充為指定的值。這個函數非常適合用於構造具有相同值的數組。它的基本語法如下:
array_fill($start_index, $num, $value);
$start_index :指定填充數組的起始索引。
$num :指定數組中元素的個數。
$value :要填充數組的值。
例如,下面的代碼會創建一個長度為5 的數組,每個元素的值都為"PHP" :
$filled_array = array_fill(0, 5, 'PHP');
print_r($filled_array);
輸出:
Array
(
[0] => PHP
[1] => PHP
[2] => PHP
[3] => PHP
[4] => PHP
)
array_merge()函數用於將一個或多個數組合併成一個數組。它將所有數組的元素都加入到一個新的數組中,返回一個包含所有元素的新數組。其基本語法如下:
array_merge($array1, $array2, ...);
$array1, $array2, ... :要合併的一個或多個數組。
下面的代碼示例展示瞭如何使用array_merge()合併兩個數組:
$array1 = [1, 2];
$array2 = [3, 4];
$merged_array = array_merge($array1, $array2);
print_r($merged_array);
輸出:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
通過array_fill()創建的數組,可以作為array_merge()的輸入來構建一個更為複雜的多維數組。以下是一個具體的示例:假設我們需要創建一個包含多組相同數據的多維數組,其中每一組數據都具有相同結構,但內容略有不同。
我們使用array_fill()為每個子數組初始化默認值,然後利用array_merge()合併它們,最終構建一個複雜的多維數組。
<?php
// 使用 array_fill 創建多個相同結構的子數組
$defaultValues = array_fill(0, 3, 'default'); // 創建一個包含 3 個 'default' 的數組
// 創建不同的數據
$group1 = array_merge(['group' => 'group1'], $defaultValues);
$group2 = array_merge(['group' => 'group2'], $defaultValues);
$group3 = array_merge(['group' => 'group3'], $defaultValues);
// 合并成一個多维数组
$complexArray = [$group1, $group2, $group3];
print_r($complexArray);
?>
輸出:
Array
(
[0] => Array
(
[group] => group1
[0] => default
[1] => default
[2] => default
)
[1] => Array
(
[group] => group2
[0] => default
[1] => default
[2] => default
)
[2] => Array
(
[group] => group3
[0] => default
[1] => default
[2] => default
)
)
在這個例子中, array_fill()用於為每個組填充相同的默認值, array_merge()用於合併這些數據成最終的多維數組。我們還為每個組添加了一個不同的標識符group1 , group2 , group3 ,使得每個子數組具有唯一的標識。
假設我們要構建一個包含多個URL 的數組,並且要將所有的域名替換為m66.net 。我們可以先使用array_fill()創建一個包含多個默認URL 的數組,然後通過array_map()對每個URL 進行處理,替換掉域名部分。
<?php
// 創建一個包含多個 URL 的數組
$urls = array_fill(0, 3, 'http://example.com/path/to/resource');
// 使用 array_map 替換所有 URL 的域名為 m66.net
$updatedUrls = array_map(function($url) {
return preg_replace('/https?:\/\/[^\/]+/', 'http://m66.net', $url);
}, $urls);
print_r($updatedUrls);
?>
輸出: