2012-04-27 127 views
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獲取索引重複位置的位置鍵,然後執行移動來移動位置。

謝謝你的時間。

+0

是的,我會做一個循環遍歷數組,並將每個元素放入一個新的數組中,並搜索現有數組中的任何重複項,並將它們從原始數據中刪除(以便它們不會循環)和把它們放入新的。 – 2012-04-27 01:45:46

+0

PHP中有很多不同的數組排序選項函數。看看這裏:'http:// php.net/manual/en/array.sorting.php' – Norse 2012-04-27 01:47:41

回答

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

0

您可以使用array_multisort()來做到這一點。

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

array_multisort不一定保留非重複的順序,這就是他想要的。 – ccKep 2012-04-27 02:25:15

+0

ccKep是正確的 – 2012-04-27 02:27:25