iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
自我挑戰組

大二萌新的學習紀錄系列 第 13

Day 13 : PHP - 當陣列中有兩個重複的key值,該如何將它們的value全部印出?

如標題,這篇想和大家聊聊「重複key」的問題
因為當你用print_r去印出有重複key的陣列時,它只會返回「最後一個key」的value

讓我們看以下範例

PHP:

//宣告一個一維陣列,其key1重複兩次
$one_array = array("key1" => "value110", "key1" => "value220");
echo "有重複key的陣列印出結果為:<br>";
print_r($one_array);

結果如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20210927/20141088UmCjpcF9ry.png

那就會有人問,要怎麼樣才能把同個keyvalue值全部都印出來?
這時我們就要把「一維」陣列改成「二維」陣列,因為每個陣列的key值都是「唯一」的,就像藏寶箱一樣,只有一把鑰匙能夠打開

那要怎麼樣才能把一維陣列改成二維陣列呢?
只要把原本的”key” => “value”array()包起來,並用逗號隔開就好

PHP:
(注意:這裡有兩個重複的keykey_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

既然已經把二維陣列宣告好了,那該如何把重複keyvalue全都印出呢?
我們用兩個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>';
        }
    }
}

結果如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20210927/20141088i6SHm3oeJT.png


以上就是今天的介紹

我當初在學習陣列時,這個問題困擾了我好幾天,因為我一直想找出能把重複keyvalue同時印出的方法
到處問到處查,最後查到「每個陣列裡的key值都是唯一的,無法有兩個以上的重複key」,雖然這說法是對的,但我實在是無法接受,因為我總覺得有方法能將其印出

直到我查到這個用法,才把心裡的糾結解開,其實只要把一維陣列改成二維的形式就好,只是當時我沒有想到二維陣列這東西,囧


參考資料:
https://stackoverflow.com/questions/5445283/how-to-allow-duplicate-keys-in-php-array


上一篇
Day 12 : PHP - 你484少給錢?如何查詢貨運訂單是否存在
下一篇
Day 14 : PHP - 如何更改XAMPP裡的phpMyAdmin的密碼?
系列文
大二萌新的學習紀錄30

尚未有邦友留言

立即登入留言