使用多个数学条件过滤二维数组的行

问题描述 投票:0回答:2

我需要在多维数组中保留必须满足多条件条件的行。

$positions = [
    ['64', '64', 'home.png', 'www.sdsd.vf'],
    ['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);
    }
);  
php arrays multidimensional-array filtering
2个回答
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');

0
投票

最好的方法是将

$i
$j
传递给你的匿名函数

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

这样您就可以避免在函数中对值进行硬编码。

© www.soinside.com 2019 - 2024. All rights reserved.