1

私の配列には、特定の文字セットのみが含まれます。ただし、これらの文字は任意の順序で配列に表示される可能性があります。

この配列を並べ替えて、常に同じ順序になるようにします。

配列に1つのエントリが含まれる場合もあれば、最大4つのエントリが含まれる場合もあるため、これは可能ですか?

配列に表示される文字() ^ & ! #

理想的には、常に次の順序にする必要があります。

!  # ^  &  ()

これは可能ですか?

ありがとう

4

2 に答える 2

1

要件に応じて、組み込みの PHP ソート関数のいずれかを使用できます。

おそらくあなたが最も興味を持っているのは2つです

  • asort - 配列をソートし、インデックスの関連付けを維持します
  • sort - この関数は配列をソートします。この関数が完了すると、要素は最下位から最上位に配置されます。

ただし、他にもかなりの数があります-PHPマニュアルの配列の並べ替えを参照してください

または、代わりに、結果の並べ替え順序が目的の順序と一致しない場合は、カスタム並べ替え関数を定義できる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);
于 2013-05-31T14:14:41.187 に答える
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;
});
于 2013-05-31T13:55:10.770 に答える