php找出数组中的重复值

php怎么找出数组中的重复值,比如下面这个数组:

$provinces=["hunan"=>"湖南","hubei"=>"湖北","shanxi"=>"山西","shanxi"=>"陕西"];

陕西山西的拼音是一样的,怎么把它们找出来呢?市县区有挺多拼音一样的,所以想写段代码查找出它们。

阅读 9.3k
10 个回答

一个数组不可能存在两个相同的key的,所有改成二维数组,相信你从数据库查出来也是二维数组

<?php

$provinces = [
    [
        'id'     => 1,
        'pinyin' => 'hunan',
        'name'   => '湖南',
    ],

    [
        'id'     => 2,
        'pinyin' => 'hubei',
        'name'   => '湖北',
    ],
    [
        'id'     => 3,
        'pinyin' => 'shanxi',
        'name'   => '山西',
    ],
    [
        'id'     => 4,
        'pinyin' => 'shanxi',
        'name'   => '陕西',
    ],
];
// 按拼音分组
$groupProvinces = [];
foreach ($provinces as $key => $value) {
    $groupProvinces[$value['pinyin']][] = $value;
}
// 获取重复的的拼音
$repeats = [];
foreach ($groupProvinces as $key => $value) {
    if (count($value) > 1) {
        $repeats[$key] = $value;
    }
}
echo '<pre>';
echo print_r($repeats);

输出的结果为:

Array
(
    [shanxi] => Array
        (
            [0] => Array
                (
                    [id] => 3
                    [pinyin] => shanxi
                    [name] => 山西
                )

            [1] => Array
                (
                    [id] => 4
                    [pinyin] => shanxi
                    [name] => 陕西
                )

        )

)

你这个数组就不对,一个数组不可能存在两个相同的key

循环数组找出指定的key值不行吗

2楼正确.数组不可能会有这样的.相同的KEY会被后者覆盖掉

将数组元素 反转两次,自动去重

array_reverse

新手上路,请多包涵

将原含有重复的数组先用两次array_flip()去重,然后将原来的和新得到的数组用此函数对比 array_diff()便可得出结果

我认为重点是把汉字转成拼音,github上有个工具还挺好用的

先把基础学好吧

同意2楼的处理方法

先不说key能否重复的问题。
为了与山西区分,陕西的拼音通常都是采用:shaanxi

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题