2012-04-27 4 views
2

は、重複した値を順番に並べて配列のを保存する最良の方法は何ですか?ここで重複値を順番に並び替える配列

は配列です:私の最初の考えは、配列をループしたとのarray_searchを行う

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

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

     ) 

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

) 

:それは次のようになりますので、

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

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

     ) 

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

) 

私はグループの重複箇所をしたいと思います位置キーは、インデックスを重複した場所を取得し、シフトを実行して場所を移動します。

お時間をいただきありがとうございます。

+0

ええ、私は配列を通してループを行い、新しい配列に各要素を置き、既存の配列内の複製を検索し、それらを元のものから切り捨てる(そうすることで、ループしないようにする)それらを新しいものに入れてください。 –

+0

PHPの配列には多くの異なるソートオプション関数があります。 'http:// php.net/manual/en/array.sorting.php' – Norse

答えて

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 = $v["location"];のために、あなたが好きな任意のキーを使用することができ$s = serialize($v);のを重要な場所。

0

これを行うにはarray_multisort()を使用できます。

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

array_multisortは、重複しない順序を必ずしも保持していないと思います。 – ccKep

+0

ccKepが正しい –

関連する問題