代码之家  ›  专栏  ›  技术社区  ›  Albeis

PHP反向重新循环数组关联

  •  0
  • Albeis  · 技术社区  · 7 年前

    我创建了一个这样的网格(有些间隙有障碍,但这对问题并不重要):

     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 回复  |  直到 7 年前
        1
  •  1
  •   trincot Jakube    7 年前

    对于倒退,你可以做:

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

    $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;
    }