如果所有值都是特定值,则递归删除子数组

时间:2012-09-18 14:41:04

标签: php arrays multidimensional-array

我需要删除所有带有0值的月份,如果所有匹配0,则必须将其删除。

这是我的数组,

Array
(
    [0] => Array
        (
            [0] => Month/Year
            [1] => BRO002
            [2] => SPI001
            [3] => TYN001
        )

    [1] => Array
        (
            [0] => Jan
            [1] => 0
            [2] => 0
            [3] => 1
        )

    [2] => Array
        (
            [0] => Feb
            [1] => 0
            [2] => 0
            [3] => 0
        )

    [3] => Array
        (
            [0] => Mar
            [1] => 0
            [2] => 0
            [3] => 0
        )

    [4] => Array
        (
            [0] => Apr
            [1] => 0
            [2] => 0
            [3] => 0
        )

    [5] => Array
        (
            [0] => May
            [1] => 0
            [2] => 3
            [3] => 0
        )

    [6] => Array
        (
            [0] => Jun
            [1] => 0
            [2] => 0
            [3] => 0
        )

    [7] => Array
        (
            [0] => Jul
            [1] => 0
            [2] => 0
            [3] => 0
        )

    [8] => Array
        (
            [0] => Aug
            [1] => 0
            [2] => 0
            [3] => 0
        )

    [9] => Array
        (
            [0] => Sep
            [1] => 11
            [2] => 1
            [3] => 2
        )

    [10] => Array
        (
            [0] => Oct
            [1] => 0
            [2] => 0
            [3] => 0
        )

    [11] => Array
        (
            [0] => Nov
            [1] => 0
            [2] => 0
            [3] => 0
        )

    [12] => Array
        (
            [0] => Dec
            [1] => 0
            [2] => 0
            [3] => 0
        )

)

以上数组将变为以下内容,

Array
(
    [0] => Array
        (
            [0] => Month/Year
            [1] => BRO002
            [2] => SPI001
            [3] => TYN001
        )

    [1] => Array
        (
            [0] => Jan
            [1] => 0
            [2] => 0
            [3] => 1
        )

    [5] => Array
        (
            [0] => May
            [1] => 0
            [2] => 3
            [3] => 0
        )

    [9] => Array
        (
            [0] => Sep
            [1] => 11
            [2] => 1
            [3] => 2
        )

)

谢谢。

4 个答案:

答案 0 :(得分:2)

检查每个值:

$newArray = array();
foreach($array as $key => $val){
    if(!(!$val[1] && !$val[2] && !$val[3])) {
        $newArray[$key] = $array[$key];
    }
}

print_r($newArray);

答案 1 :(得分:0)

$Temp = array();

foreach ($Array as $Key=>$Value) 
  if ($Value[1]!=0 || $Value[2]!=0 || $Value[3]!=0)
    $Temp[$Key] = $Value;

$Array = $Temp;

答案 2 :(得分:0)

$array = array(
    array('Jan', 0, 0, 1), 
    array('Feb', 0, 1, 0), 
    array('Mar', 0, 0, 0), 
    array('Apr', 1, 1, 1)
);

foreach($array as $i => $a) {
    $save = false;
    foreach($a as $k => $v) {
        if($k == 0) continue; 
        if($v != 0) $save = true; 
    }
    if(!$save) unset($array[$i]);
}

var_dump(array_values($array));

答案 3 :(得分:0)

无需第二个数据结构:

foreach ( $data as $i => $month ) {
  if ( $i == 0 ) { continue; }
  if (
    $month[1] == 0 &&
    $month[2] == 0 &&
    $month[3] == 0 
  ) {
    unset($data[$i]);
  } 
}