0

私は、大文字と小文字を区別しない基準に基づいて多次元配列から URL を並べ替えたい典型的なケースに取り組んでおり、URL に関連付けられたステータスでもあります。ユーザーが異なるステータスの複数の URL を設定した場合、重複した URL からステータスが false に設定された URL を 1 つだけ取得したいと考えています。

元の配列:

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
     )
)
4

2 に答える 2

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);
?>

お役に立てれば。

于 2012-11-08T06:40:29.173 に答える
1
$filtered = array();

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

var_dump($filtered);
于 2012-11-08T07:21:54.687 に答える