从PHP中的多维数组中删除重复数组

测验

如何从该数组中过滤重复值?

实际上,对于countrycity,数据是相同的-除了总体发生变化之外。

如何删除包含更高人口的阵列?

$arr = array
(
    "100" => array(
        array(
            "country" => 'France',
            "city" => 'Paris',
            "population" => '1800000',
        ),
        array(
            "country" => 'France',
            "city" => 'Paris',
            "population" => '2000000',
        ),
        array(
            "country" => 'France',
            "city" => 'Toulouse',
            "population" => '500000',
        ),
    )
    "101" => array(
        array(
            "country" => 'Russia',
            "city" => 'Moscow',
            "population" => '144000000',
        )
    )
);

因此,所需的输出应为:

$arr = array
(
    "100" => array(
        array(
            "country" => 'France',
            "city" => 'Paris',
            "population" => '1800000'
        ),
        array(
            "country" => 'France',
            "city" => 'Toulouse',
            "population" => '500000'
        ),
    )
    "101" => array(
        array(
            "country" => 'Russia',
            "city" => 'Moscow',
            "population" => '144000000',
        )
    )
);

这是我尝试的

$temp_array = [];
foreach ($array as &$v) {
    if (!isset($temp_array[$v['country']] && $temp_array[$v['city']]))
        $temp_array[$v[$key]] =& $v;
    }
$array = array_values($temp_array);
return $array;
dWinder

您可以首先使用array_reduce过滤较低的人口(使用国家和城市的组合作为关键字)。然后将其爆炸并使用该最小值重置数组:

foreach($arr as $k => &$ar) {
    $temp = array_reduce($ar, function ($carry, $item) {
        $key = $item["country"] . "###" . $item["city"];
        $carry[$key] = (isset($carry[$key]) && $item["population"] > $carry[$key]) ?  $carry[$key] : $item["population"];
        return $carry;
    }, []);
    $ar = [];
    foreach($temp as $k => $val) {
        list($country, $city) = explode("###", $k);
        $ar[] = array("country" => $country, "city" => $city, "population" => $val);
    }
}

直播示例:3lv4

编辑

您可以使用array_filter,而不是foreach循环,以避免应对:

$ar = array_filter($ar, function ($item) use ($mins) {
    $key = $item["country"] . "###" . $item["city"];
    return $mins[$key] == $item["population"];
 });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章