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-27 Excel的count家族

>>:  [Python 爬虫这样学,一定是大拇指拉!] DAY12 - HTTP / HTTPS (3)

Day2-为小学生撰写的网站小游戏_template精简程序码

昨天写的小网站後续看文章时觉得有一部分JS有硬干的嫌疑(?) 所以把一些部分做了改动 首先使用了HT...

我们的基因体时代-AI, Data和生物资讯 Day16- 视觉浏览定序档案格式SAM, BAM的工具

上一篇我们的基因体时代-AI, Data和生物资讯 Day15- 组装後的序列档案格式SAM, BA...

【Day 30】总结

终於写完三十天,原本中途二十天就想放弃了,每天嚷嚷可不可以不要继续了。 原以为自己做的东西很多,很够...

Day-25 Deadlock

Deadlock tags: IT铁人 介绍 Deadlock是Multi-process常产生的问...

D10. 学习基础C、C++语言

D10: 简单的练习UVA(11805) #include <stdio.h> #inc...