2017-09-15 79 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