按顺序重新排序具有重复值的数组

时间:2012-04-27 01:38:00

标签: php multidimensional-array sorting

在按顺序放置重复值时,保留数组的顺序的最佳方法是什么。

这是数组:

Array
(
    [0] => Array
        (
            [location] => 1320 N Street
        )

    [1] => Array
        (
            [location] => 1316 N St

        )

    [2] => Array
        (
            [location] => 1320 N Street
        )

)

我想将重复的位置分组,看起来像这样:

    Array
(
    [0] => Array
        (
            [location] => 1320 N Street
        )

    [1] => Array
        (
            [location] => 1320 N Street

        )

    [2] => Array
        (
            [location] => 1316 N St
        )

)

我最初的想法是遍历数组并对位置键执行array_search以使索引成为重复位置,然后执行移位以移动位置。

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

这对我有用:

$arr = array(
        array("location" => "1320 N Street"),
        array("location" => "1320 N St"),
        array("location" => "1320 N Street"),
);

$tmp = array();
$sorted = array();
foreach ($arr as $k => $v)
{
        $s = serialize($v);
        if (!isset($tmp[$s]))
        {
                $tmp[$s] = $k;
                array_push($sorted, $v);
        } else {
                $sorted = array_merge(array_slice($sorted, 0, $tmp[$s]+1), array($v), array_slice($sorted, $tmp[$s]+1));
        }
}

print_r($sorted);

示例输出:

Array
(
    [0] => Array
        (
            [location] => 1320 N Street
        )

    [1] => Array
        (
            [location] => 1320 N Street
        )

    [2] => Array
        (
            [location] => 1320 N St
        )

)

编辑: 您可以使用任何您喜欢的密钥代替$s = serialize($v);,例如$s = $v["location"];,如果它只是重​​要的位置。

答案 1 :(得分:0)

您可以使用array_multisort()执行此操作。

array_multisort($sub_array[0], SORT_ASC, SORT_STRING,
                $sub_array[1], SORT_NUMERIC, SORT_DESC);