PHP - 如何将数组推入特定位置?

时间:2013-07-05 15:16:27

标签: php arrays

我希望我能解释一下我的问题

我在数组(10x10)上填充了1和0 e.g。

0000000000
0000000000
00的 00000 000
00的 00000 000
0000000000
0000000000
0000111100
0000000000
11.11亿个
0000000000

现在我想推送另一个数组

e.g。

11111
11111

在特定的位置点(3,3)上 我在粗体

中突出显示了该位置

0000000000
0000000000
00的 11111 000
00的 11111 000
0000000000
0000000000
0000111100
0000000000
11.11亿个
0000000000

此外,如果该字段上已有值,请添加它,如果我重复该字段 处理矩阵将成为这个。

0000000000
0000000000
00的 22222 000
00的 22222 000
0000000000
0000000000
0000111100
0000000000
11.11亿个
0000000000

我希望有人能指出我正确的方向。我已经玩了一些数组函数,但我无法让它工作。

你有什么建议?

3 个答案:

答案 0 :(得分:2)

这些方面应该做的事情:

/**
 * Push a small matrix into a larger matrix.
 * Note: no size restrictions are applied, if $push
 * exceeds the size of $matrix or the coordinates are
 * too large you'll get a jaggy array.
 *
 * @param array $matrix A 2D array of ints.
 * @param array $push   A 2D array <= $matrix to push in.
 * @param int   $x      The starting x coordinate.
 * @param int   $y      The starting y coordinate.
 * @return array The modified $matrix.
 */
function matrix_push(array $matrix, array $push, $x, $y) {
    list($i, $j) = array($x, $y);

    foreach ($push as $row) {
        foreach ($row as $int) {
            $matrix[$i][$j++] += $int;
        }
        $i++;
        $j = $y;
    }

    return $matrix;
}

答案 1 :(得分:1)

对于二维数组,你可以做这样的事情。请注意,您在问题中定义为(3,3)的内容实际上是从数组的角度来看(2,2)。在这种情况下,输入$x$y将为2和2。

function replaceArray( $orig, $replace, $x, $y ) {
  //Some safety checks
  //Return false if the array that we replace with exceeds the boundaries of the original array
  if( $x + count( $replace[0] ) > count( $orig[0] ) || $y + count( $replace ) > count( $orig ) ) {
    return false;
  }

  for( $i = 0; $i < count($replace[0]); $i++ ) {
    for( $j = 0; $j < count( $replace ); $j++ ) {
      $orig[ $x + $i ][ $x + $j ] += $replace[ $i ][ $j ];
    }
  }

  return $orig;
}

答案 2 :(得分:0)

哇,那很快:)

你实现它的好方法。这是我的代码也可以解决它,但有一些更多

$array1 = array(0=>array(0,0,0,0,0,0,0,0,0,0,0),
        1=>array(0,0,0,0,0,0,0,0,0,0,0),
        2=>array(0,0,0,0,0,0,0,0,0,0,0),
        3=>array(0,0,0,0,0,0,0,0,0,0,0),
        4=>array(0,0,0,0,0,0,0,0,0,0,0),
        5=>array(0,0,0,0,0,0,0,0,0,0,0),
        6=>array(0,0,0,0,0,0,0,0,0,0,0),
        7=>array(0,0,0,0,0,0,0,0,0,0,0));



$array2 = array(0=>array(1,1,1),
                1=>array(1,1,1),
                2=>array(1,1,1));

$row = 3;
$col = 3;
foreach($array2 AS $valuesToReplace)
{   $col = 3;
    foreach($valuesToReplace AS $value)
    {
        $array1[$row][$col] = $value;
        $col++;
    }
    $row++;
}