【问题标题】:Multidimensional array filtering多维数组过滤
【发布时间】:2013-01-24 23:13:06
【问题描述】:

我正在尝试将一些图像放到另一张图像上。下面的短代码是关于我尝试的示例。但是 $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);
    }); 

感谢您的帮助。

【问题讨论】:

  • 您知道您的两个for 循环都没有结束}(而一个没有{

标签: php arrays filtering


【解决方案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');

【讨论】:

    【解决方案2】:

    最好的方法是将$i$j 传递给你的匿名函数

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

    这样您将避免在函数中硬编码值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-09
      • 2021-05-24
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多