0

PHP でスネーク ループを実行する方法、またはループするたびに PHP 配列を逆にする方法 このメソッドまたは手法が何と呼ばれているのかわからないので、スネーク ループと呼ぶことにします。

基本的に私がやろうとしているのは、配列をループして、次にループするときにその配列の順序を逆にすることです。

やや単純な方法と思われる方法を思いつきましたが、これが正しい方法なのか、それともより良い方法があるのか​​ わかりませんでした。

<?php
$rounds = 4;
$teams = array('Team 1', 'Team 2', 'Team 3', 'Team 4') ;

for($round = 1; $round <= $rounds; $round++){
    echo "<h1>Round $round</h1>";

    if ($round % 2 == 0) {
        krsort($teams);
    }else{
        asort($teams);
    }        

    foreach($teams as $team){
        echo "$team<br />";
    }
}

?>

出力:

Round 1
Team 1
Team 2
Team 3
Team 4

Round 2
Team 4
Team 3
Team 2
Team 1

Round 3
Team 1
Team 2
Team 3
Team 4

Round 4
Team 4
Team 3
Team 2
Team 1

基本的に、が奇数の場合と偶数ascendingの場合に配列がソートされることがわかります。 $rounddescending

4

4 に答える 4

1

配列の反転はコストがかかると思います。反転インデックスを計算する方がよいと思います。

array A (6 length) 0,1,2,3,4,5

array B (5 length) 0,1,2,3,4

(len-1)-i
//^ this should calculate the inverted index, examples:

//in the array A, if you are index 3: (6-1)-3 = 2, so 3 turns to 2
//in the array A, if you are index 1: (6-1)-1 = 4, so 1 turns to 4
//in the array B, if you are index 3: (5-1)-3 = 1, so 3 turns to 1
//in the array B, if you are index 1: (5-1)-1 = 3, so 1 turns to 3

私は PHP を書きませんが、次のようにする必要があります。

teams = array('Team 1', 'Team 2', 'Team 3', 'Team 4');
len = teams.length;
myindex; //initializing the var

for(i=0; i<len; i++){
    echo "<h1>Round "+ (i+1) +"</h1>";
    myindex = i;

    if(i%2 == 0) {
        myindex = ((len-1) - i);
    }

    echo team[myindex];
}
于 2013-07-17T20:17:07.947 に答える
1

コードを変更して array_reverse を実装する:

<?php
$rounds = 4;
$teams = array('Team 1', 'Team 2', 'Team 3', 'Team 4') ;

for($round = 1; $round <= $rounds; $round++){
  echo "<h1>Round $round</h1>";

  if ($round % 2 == 0) {
    $teams = array_reverse($teams);
  }    
  foreach($teams as $team){
    echo "$team<br />";
  }
}
?>
于 2013-07-17T20:27:37.457 に答える
0

array_reverseは配列の反転を返す関数です。

php 配列オブジェクトのコンテンツをサイクルごとに反転させようとしている場合は、毎回配列変数を設定する必要があります。それ以外の場合は、各サイクルで単に array_reverse の出力を返すことができます。

于 2013-07-17T20:17:10.843 に答える