如何只保留唯一值并根据PHP中数组中的某些标志删除所有重复值?

时间:2012-11-08 06:24:15

标签: php

我正在处理典型情况,我想根据不区分大小写的基础从多维数组中对URL进行排序,以及它们与URL相关联的状态。如果用户设置了多个具有不同状态的URL,那么我想从重复的URL中获取状态设置为false的唯一一个url。

原始阵列:

Array
(
[0] => Array
    (
        [url] => www.abc.com
        [status] => true
    )

[1] => Array
    (
        [url] => www.123.com
        [status] => true
    )

[2] => Array
    (
        [url] => www.abc.com
        [status] => true
    )


[3] => Array
    (
        [url] => www.Abc.com
        [status] => false
    )
)

我想要的最终结果:

Array
(
[0] => Array
    (
        [url] => www.abc.com
        [status] => false
    )

[1] => Array
    (
        [url] => www.123.com
        [status] => true
     )
)

2 个答案:

答案 0 :(得分:1)

试试这个:

<?php
$arr = array(
    array(
        'url' => 'www.abc.com',
        'status' => 'true'
    ),
    array(
        'url' => 'www.123.com',
        'status' => 'true'
    ),
    array(
        'url' => 'www.abc.com',
        'status' => 'true'
    ),
    array(
        'url' => 'www.Abc.com',
        'status' => 'false'
    )
);

function tolower($v) {
    return array('url'=>strtolower($v['url']),'status'=>$v['status']);
}
$arr = array_map("unserialize", array_unique(array_map("serialize",array_map("tolower", $arr))));
print_r($arr);
?>

希望这有帮助。

答案 1 :(得分:1)

$filtered = array();

foreach ($urls as $url) {
    $key = strtolower($url['url']);
    if (!isset($filtered[$key]) || $filtered[$key]['status']) {
        $filtered[$key] = $url;
    }
}

var_dump($filtered);