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 に答える