2017-09-15 89 views
0

我有一個創建一個這樣的網格(有些差距有一個障礙,但它不是重要的問題):PHP-Relooping陣列關聯向後

private function newGrid() 
    { 
     $grid = array(); 

     for ($i = 0; $i < 10; $i++) { 
      for ($j = 0 ; $j < 10; $j++) { 
       $grid[$i][$j] = ['obstacle' => rand(0,1)]; 
      } 
     } 

     return $grid; 
    } 

所以,最初的定位是一個數組:

$loc = array('x' => 1, 'y' => 3); 

例如,如果我要移動到x方向,我想從網格的一個邊緣換到另一個邊緣(如球體)。 (向前和向後)

當我前進,我使用這樣的模量:

$loc['x'] = ($loc['x'] + 1) % 10 ; 

但如果我想這樣做,而是向後倒退,這是爲了更好的辦法去做?當x變爲0時,轉到位置x = 9

任何建議?

+1

你是在找'['array_reverse()'](http://php.net/manual/en/function.arra Y型reverse.php)?你的問題措辭有點混淆 – GrumpyCrouton

+0

謝謝你回覆@GrumpyCrouton。什麼讓你困惑?它是一個10×10的位置的網格,我想設置每個運動的位置,但是當我到達邊緣(如球體)時,位置必須「重新設置」並重新開始。相同的倒退希望這更清楚 – Albeis

回答

1

對於退步,你可以這樣做:

$loc['x'] = ($loc['x'] + 9) % 10 ; 

如果您有動態的 「方向」 變量,它可以採取值1(前)和-1(向後),則:

$loc['x'] = ($loc['x'] + 10 + $direction) % 10 ; 

也許這將是一個實用的功能:

function move($loc, $deltaX, $deltaY) { 
    $loc['x'] = ($loc['x'] + 10 + $deltaX) % 10; 
    $loc['y'] = ($loc['y'] + 10 + $deltaY) % 10; 
    return $loc; 
} 
+0

@Albeis,你可以看到+9爲-1,模10,這是相同的操作。 –

+0

@trincot感謝您的回覆。這隻適用於x = 1時,它會移動x直到x = 9,這就是我正在尋找的,但是當x = 3時,如果我應用它,我希望x等於2,而不是1使用$ loc [ 'x'] =($ loc ['x'] + 9 - 1)%10。注意-1反向。問候 – Albeis

+0

@MateiRogoz是的,但是當x從0到-1時會發生什麼?我希望x是9而不是-1 .. – Albeis