2

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

这是数组:

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 以获取索引重复位置,然后执行移位以移动位置。

谢谢你的时间。

4

2 回答 2

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"];如果它只是重​​要的位置。

于 2012-04-27T02:13:42.410 回答
0

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

array_multisort($sub_array[0], SORT_ASC, SORT_STRING,
                $sub_array[1], SORT_NUMERIC, SORT_DESC);
于 2012-04-27T01:50:01.873 回答