3

通常の関数を使用して配列をソートしようとして苦労しています。これにはカスタム比較関数が必要だと確信していますが、それでもこれをそこに捨てるでしょう。

内部に5つの要素を持つ配列があります。配列がそのようにソートされるようにしたいのですが、arsort は近くなりましたが、完全ではありませんでした:

4,0,1,2,3

明確にするために、次のような配列の位置: $array[0];

私はこれまで実際に配列比較関数を見たことがないので、これを解決するには正しい方向へのプッシュが最も役立ちます!

ありがとう、

アダム

4

3 に答える 3

14

このメソッドは、事前に定義されたキーの順序を使用して配列をソートしますuksort

$desiredIndexOrder = array(4 => 1, 0 => 2, 1 => 3, 2 => 4, 3 => 5);

uksort($inputArray, function($a, $b) use ($desiredIndexOrder) {
    return $desiredIndexOrder[$a] > $desiredIndexOrder[$b] ? -1 : 1;
});

$desiredIndexOrder配列がindex => desired sort positionフォーマットされていることに注意してください。配列をその形式にしたくない場合は、これを使用して構築することができます。

$desiredIndexOrder = array();

foreach ($desiredKeyOrder as $position=>$key) {
    $desiredIndexOrder[$key] = $position + 1;
}

キー$desiredKeyOrderの配列の順序は次のとおりです。array(4, 0, 1, 2, 3)

于 2013-03-08T13:29:15.453 に答える
0

これを試して

$array = array('t','r','a','c','k');
$keys = '4,0,1,2,3';

$keyArr = explode(',', $keys);
$sarr = array();

foreach ($keyArr as $key)
{
    $sarr[$key] = $array[$key];
}
print_r($sarr);
于 2013-03-08T13:23:47.923 に答える
0

これを試して :

$numbers = array(1,2,3,4,5);
array_unshift($numbers, array_pop($numbers));

echo "<pre>";
print_r($numbers);

出力:

Array
(
    [0] => 5
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
)
于 2013-03-08T13:26:44.297 に答える