订单数组结果

时间:2013-05-31 13:50:29

标签: php arrays

我的数组只包含一组特定的字符。但是,这些字符可以按任何顺序出现在数组中。

我想重新排列这个数组,因此它们始终处于相同的顺序。

这是否可行,因为有时候数组将包含1个条目,其他时间最多可包含4个条目。

数组中可能出现的字符为() ^ & ! # 但是在提交表单之前我不知道订单是什么。

理想情况下,我总是希望它们按以下顺序排列:

!  # ^  &  ()

这可能吗?

由于

2 个答案:

答案 0 :(得分: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 :(得分:1)

您可以使用内置的PHP排序功能之一,具体取决于您的要求。

可能你最感兴趣的两个是

  • asort - 对数组进行排序并维护索引关联
  • sort - 此函数对数组进行排序。此功能完成后,元素将从最低到最高排列。

尽管如此,还有不少其他人 - 请参阅Php手册中的Sorting Arrays

或者,或者,如果生成的排序顺序与您所需的排序顺序不匹配,则可以使用usort,这允许您定义自定义排序功能

这样的事情应该有效

  $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);