You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现:以另一数组中的重复元素作为键创建新数组

按城市分组数组的PHP实现方案

嘿,我来帮你搞定这个需求!看起来你想把原数组里重复的miasto(城市)字段作为新数组的键,然后把对应城市的所有地址条目归到这个键下面对吧?下面给你两种实用的实现方式:

方法一:使用foreach循环(直观易懂)

首先先把你的原数组用标准PHP格式整理出来:

$originalArray = [
    [
        'miasto' => 'Tarnów',
        'ulica' => 'ul. Kościuszki 120',
        'link' => '<a class="cfs-hyperlink" href="/strona-w-budowie" target="_blank"><span class="text"></span></a>'
    ],
    [
        'miasto' => 'Tarnów',
        'ulica' => 'ul. Pułaskiego 12',
        'link' => '<a class="cfs-hyperlink" href="/strona-w-budowie" target=""><span class="text"></span></a>'
    ],
    [
        'miasto' => 'Kraków',
        'ulica' => 'ul. Test 12',
        'link' => '<a class="cfs-hyperlink" href="/strona-w-budowie" target="_blank"><span class="text"></span></a>'
    ]
];

然后用foreach遍历分组:

// 初始化空数组用于存储分组结果
$groupedArray = [];

foreach ($originalArray as $item) {
    // 取出当前条目的城市名称作为键
    $city = $item['miasto'];
    
    // 如果该城市对应的键还没创建,先初始化一个空数组
    if (!isset($groupedArray[$city])) {
        $groupedArray[$city] = [];
    }
    
    // 将当前条目添加到对应城市的数组中
    $groupedArray[$city][] = $item;
}

// 打印结果验证
print_r($groupedArray);

运行后你会得到这样的结果:

Array
(
    [Tarnów] => Array
        (
            [0] => Array
                (
                    [miasto] => Tarnów
                    [ulica] => ul. Kościuszki 120
                    [link] => <a class="cfs-hyperlink" href="/strona-w-budowie" target="_blank"><span class="text"></span></a>
                )

            [1] => Array
                (
                    [miasto] => Tarnów
                    [ulica] => ul. Pułaskiego 12
                    [link] => <a class="cfs-hyperlink" href="/strona-w-budowie" target=""><span class="text"></span></a>
                )

        )

    [Kraków] => Array
        (
            [0] => Array
                (
                    [miasto] => Kraków
                    [ulica] => ul. Test 12
                    [link] => <a class="cfs-hyperlink" href="/strona-w-budowie" target="_blank"><span class="text"></span></a>
                )

        )

)

方法二:使用array_reduce(简洁函数式写法)

如果你喜欢更紧凑的代码风格,可以用PHP的array_reduce函数来实现:

$groupedArray = array_reduce($originalArray, function($carry, $item) {
    $city = $item['miasto'];
    // 直接将条目追加到对应城市的数组中(PHP会自动创建不存在的键)
    $carry[$city][] = $item;
    return $carry;
}, []);

// 同样可以打印结果验证
print_r($groupedArray);

这个方法和foreach的效果完全一致,只是写法更偏向函数式编程。

额外小提示

如果你的原数组中城市名称存在大小写不一致的情况(比如Tarnów和tarnów),可以把键转换成小写来统一分组:

$city = strtolower($item['miasto']);

这样就能避免因为大小写差异导致的重复键问题啦!

内容的提问来源于stack exchange,提问作者Fadlan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:01:39