1

配列を交互に最小の最大値にソートする方法を知っている人はいますか?

IE

Array (10, 2, 5, 1, 30, 1, 7)

する必要があります:

(30, 1, 10, 1, 7, 2, 5)

編集:

配列が連想的であることに言及するのを忘れたので、次のようになります。

Array("A"=>10, "B"=>2, "C"=>5, "D"=>1, "E"=>30, "F"=>1, "G"=>7)

次のようになります。

("E"=>30, "D"=>1, "A"=>10, "F"=>1, "G"=>7, "B"=>2, "C"=>5)
4

4 に答える 4

1

配列を並べ替えてから、配列の最初と最後から要素を交互にプッシュします。

<?php

    $myArray = array(10, 2, 5, 1, 30, 1, 7);
    sort($myArray );
    $count=sizeof($myArray );

    $result= array();
    
    for($counter=0; $counter * 2 < $count; $counter++){

         array_push($result, $myArray[$count - $counter - 1]);
         //check if same elements (when the count is odd)
         if ($counter != $count - $counter - 1) {
             array_push($result, $myArray[$counter]);
         }

    }
    print_r ($result);

?>

戻り値:

Array ( [0] => 30 [1] => 1 [2] => 10 [3] => 1 [4] => 7 [5] => 2 [6] => 5 )
于 2012-11-29T10:37:23.057 に答える
0

これを行うための事前定義された方法はありません。usort ただし、phpでは、必要な方法で配列を並べ替えるためにカスタマイズできるユーザー並べ替え関数を使用できます。

于 2012-11-29T10:35:16.900 に答える
0

正確な構文はわかりません。私のphpは非常に錆びていますが、できることは次のとおりです。

  • 配列を降順で並べ替えます

  • 半分に分割します。たとえば、配列AとBとします。

  • 新しい配列を作成し、AとBの各要素を順番に追加します$A[i], $B[count($B)-1-i]

これはあなたが必要なものを与えるはずです

于 2012-11-29T10:39:20.737 に答える
0
<?php
$x = array(10, 2, 5, 1, 30, 1, 7);

// First sort
sort($x);

// Then pick highest and lowest from the back and front of the array
// until it is empty.
$z = array();
while (count($x) > 0){
    $z[] = array_pop($x);
    if (count($x) > 0) // <- For arrays with an odd number of elements.
      $z[] = array_shift($x);
}

var_dump($z);
于 2012-11-29T10:43:22.957 に答える