在PHP中切片2d数组

时间:2016-11-18 08:50:38

标签: php arrays 2d

当所有列都为零时,有没有办法切片2d数组? TIA

$cars = array(
    array('Cars', 0, 18, 2, 4, 0, 3, 0, 8),
    array('BMW', 0, 13, 2, 4, 0, 3, 0, 8),
    array('Saab', 0, 29, 2, 4, 0, 3, 0, 8),
    array('Land Rover', 0, 15, 2, 4, 0, 3, 0, 8),
    );

 echo '<table border="1">';
 foreach ($cars as $car) {
     echo '<tr>';
     foreach ($car as $key) {
         echo '<td>'.$key.'</td>';
     }
     echo '</tr>';
 }
 echo '</table>';

1 个答案:

答案 0 :(得分:0)

如果列中的每个值都具有值0,则以下代码将删除列。如果您有其他计划,例如切片,您仍然可以使用该代码来帮助您确定您想要的内容。

我在实际打印数组之前这样做,因为我不是简单地知道执行此操作的函数,所以你必须创建一个。

函数array_column()用于检索列,并将其与array_intersect()进行比较,后者返回具有相同值的行,并将其与表中的行数进行比较。

$cols = count($cars[0]);
$rows = count($cars);
$filter = [0]; // add more unwanted values if you please

for($col=1; $col<$cols; $col++){ // skip index 0
    if(count(array_intersect(array_column($cars, $col), $filter))) == $rows){
        // We found a column "$col" where every value is "0".
        foreach($cars as $k => $arr){
            // Looping over the main array.
            unset($arr[$col]); // unset the cloned array.
            $cars[$k] = $arr;  // update the original array with new value.
        }
    }
}

现在,您可以使用与之相同的代码打印表格。