多维数组过滤

时间:2011-02-28 09:44:51

标签: php arrays filtering

我正在尝试将一些图像放到另一张图像上。下面的简短代码是关于我尝试的一个示例。但$ i和$ j变量是不可见的。

$positions = array(
         array('64','64','home.png','www.sdsd.vf'),
         array('128','640','icon-building64.png','www.sdsd232.vf')
        );
for($i=0; $i<700; $i+=64)
    for($j=0; $j<1100; $j+=64)
    {
                  $out = array_filter($positions, function($position) {
                  return ($position[0] == $j AND $position[1] == $i);
    }); 
    $out = array_merge(array(),$out);

我尝试了这个,但是我收到了错误:

    $out = array_filter($positions, function($position,$i,$j) {
                  return ($position[0] == $j AND $position[1] == $i);
    }); 

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你不能将额外的参数传递给array_filter函数,任何过滤应该在那里进行,而不是像你这样的循环:

function filterPositions($value) {
  return
    ($value[0] < 1100 && $value[1] < 700) &&
    ($value[0] % 64 == 0) && ($value[1] % 64 == 0);
}
$out = array_filter($positions, 'filterPositions');

答案 1 :(得分:0)

执行此操作的最佳方法是将$i$j传递给您的匿名函数

$out = array_filter($positions, function($position) use ($i, $j) {
                  return ($position[0] == $j AND $position[1] == $i);
    });

这样你就可以避免在函数中使用硬编码值。