2013-05-31 71 views
1

我的數組只包含一組特定的字符。但是,這些字符可以以任何順序出現在數組中。Order Array Results

我想重新排列這個數組,使它們始終處於相同的順序。

這是可能的,因爲有些時候數組可能包含1個條目,其他時間最多4個條目可能更多。

可能出現在數組中的字符將爲()^& ! # 但是我不知道在提交表單之前按什麼順序。

理想的情況下,我總是希望他們是按以下順序:

! #^& () 

這可能嗎?

感謝

+0

這是可能的,但是PHP使得比大多數語言困難了很多。 – Antimony

+0

我不知道窗體是什麼樣子,但也許你可以在那裏使用一個數組並分配固定的鍵。這樣他們將始終以相同的順序**和**始終具有相同的密鑰。 – jeroen

+0

我將如何分配固定鍵? – MacMan

回答

1

嘗試這樣的事情

// establish the sort order 
$order = array("!","#", "^", "&", "(",")"); 

// usort with indexes of $orderArray 
usort($arr, function($a, $b) use($order) { 
     $aIdx = array_search($a, $order); 
     $bIdx = array_search($b, $order); 
     return $aIdx - $bIdx; 
}); 
1

你可以使用內置的PHP排序功能之一,根據您的要求。

大概兩個你最感興趣的是

  • asort - 對數組進行排序並保持索引關係
  • sort - 此功能排序的數組。此功能完成後,元素將從低到高排列。

雖然,也有相當多的人 - 請參閱Sorting Arrays從PHP手冊

,或者,如果得到的排序順序不匹配你渴望什麼,你可以使用,它允許你定義自定義排序函數

像這樣的東西應該工作

$arrayToSort = array('#','&','()','^','!'); 
    $order = array('!', '#', '^', '&', '()'); 

    function compare($a,$b) { 
    global $order; 
    $indexa = array_search($a,$order); 
    $indexb = array_search($b,$order); 
    return ($indexa < $indexb) ? -1 : 1; 
    } 

    usort($arrayToSort, $compare); 
+0

這在功能上與我的方法相同。你的方法優於我的,更容易閱讀。我的方法的優點可以生活在一個功能,而不會混淆全局名稱空間。也不使用全局關鍵字。 – Orangepill

+0

謝謝,我該如何使用它。它與PHP 4兼容嗎? 我運行這個的網絡設備只支持php 4! – MacMan

+1

完全同意..我正在編輯我的帖子。我喜歡你的代碼。它看起來非常乾淨。雙加使用匿名功能。 另外,yeh asort,usort都在php 4中工作。 –