如標題,這篇想和大家聊聊「重複key」的問題
因為當你用print_r
去印出有重複key
的陣列時,它只會返回「最後一個key」的value
值
讓我們看以下範例
PHP:
//宣告一個一維陣列,其key1重複兩次
$one_array = array("key1" => "value110", "key1" => "value220");
echo "有重複key的陣列印出結果為:<br>";
print_r($one_array);
結果如下圖所示:
那就會有人問,要怎麼樣才能把同個key
的value
值全部都印出來?
這時我們就要把「一維」陣列改成「二維」陣列,因為每個陣列的key值都是「唯一」的,就像藏寶箱一樣,只有一把鑰匙能夠打開
那要怎麼樣才能把一維陣列改成二維陣列呢?
只要把原本的”key” => “value”
用array()
包起來,並用逗號
隔開就好
PHP:
(注意:這裡有兩個重複的key為key_1
)
//宣告一個二維陣列,其key_1重複兩次
$many_array = array(array("key_1" => "value_1"), //key = 0
array("key_2" => "value_2"), //key = 1
array("key_3" => "value_3"), //key = 2
array("key_1" => "value_4")); //key = 4
既然已經把二維陣列宣告好了,那該如何把重複key
的value
全都印出呢?
我們用兩個foreach
迴圈,進到二維陣列裡用if
找和key_1
相符的key
,並將其印出
如果你有學過Java或C,並且有學過如何印出九九乘法表,那恭喜你,這裡的寫法「本質上」就和寫九九乘法表一樣,差異在於多了一個if
判斷式,使用的函數也不一樣
PHP:
//欲印出value的key值
$searchKey = "key_1";
echo "找出key = key_1的value有哪些:<br>";
//這裡只需定義value,因為我們沒定義key值,所以key值會自動從0開始
//mValue = $many_array裡的值
foreach ($many_array as $mValue) {
foreach ($mValue as $key => $value) {
//找出和$searchKey相同的$key值
if ($key == $searchKey) {
echo $value.'<br>';
}
}
}
結果如下圖所示:
以上就是今天的介紹
我當初在學習陣列時,這個問題困擾了我好幾天,因為我一直想找出能把重複key
的value
同時印出的方法
到處問到處查,最後查到「每個陣列裡的key值都是唯一的,無法有兩個以上的重複key」,雖然這說法是對的,但我實在是無法接受,因為我總覺得有方法能將其印出
直到我查到這個用法,才把心裡的糾結解開,其實只要把一維陣列改成二維的形式就好,只是當時我沒有想到二維陣列這東西,囧
參考資料:
https://stackoverflow.com/questions/5445283/how-to-allow-duplicate-keys-in-php-array