基于简单条件消除数组项


Elimination of array items based on a simple condition

我有一个数组,其中包含关于盒子、盒子的体积和重量的信息。

$boxes = array('box1' => array('v' => 1.2, 'w' => 2.45), 
               'box2' => array('v' => 3.1, 'w' => 1.37), 
               'bigbox1' => array('v' => 6.2, 'w' => 5.45), 
               'box3' => array('v' => 2.15, 'w' => 2.94), 
               'smallbox1' => array('v' => 0.86, 'w' => 1.04), 
               'bigbox2' => array('v' => 11.3, 'w' => 10.9), ..);

我想去掉所有体积较大、重量较轻的盒子。例如,箱子2将被取消,因为箱子1更小更重。

您可以使用2个foreach循环。对于第一个foreach中的每个框,您将在所有框上再次循环,如果满足条件,则可以从$boxes数组中取消设置。

$boxes = array(
    'box1' => array('v' => 1.2, 'w' => 2.45),
    'box2' => array('v' => 3.1, 'w' => 1.37),
    'bigbox1' => array('v' => 6.2, 'w' => 5.45),
    'box3' => array('v' => 2.15, 'w' => 2.94),
    'smallbox1' => array('v' => 0.86, 'w' => 1.04),
    'bigbox2' => array('v' => 11.3, 'w' => 10.9)
);
foreach ($boxes as $key => $box) {
    foreach ($boxes as $b) {
        if (($box['v'] > $b['v']) && ($box['w'] < $b['w'])) {
            unset($boxes[$key]);
        }
    }
}