2013-05-31 42 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中工作。 –