过滤掉数组中所有实例的值为 0 的列

我有一个这样的二维数组:


$input = array(

    "Category 1" => array(

        "Name 1" => array(

            "value" => 1,

            // ... other keys, doesn't matter

        ),

        "Name 2" => array(

            "value" => 0,

        ),

        "Name 3" => array(

            "value" => 0,

        ),

    ),

    "Category 2" => array(

        "Name 1" => array(

            "value" => 8,

        ),

        "Name 2" => array(

            "value" => 0,

        ),

        "Name 3" => array(

            "value" => 12,

        ),

    ),

);

请注意,每个Category N都有相同的Name N键,只有value变化。


我想过滤掉value=0每个维度中的条目,例如:


$ouput = array(

    "Category 1" => array(

        "Name 1" => array(

            "value" => 1,

            // ... other keys, doesn't matter

        ),

        "Name 3" => array(

            "value" => 0,

        ),

    ),

    "Category 2" => array(

        "Name 1" => array(

            "value" => 8,

        ),

        "Name 3" => array(

            "value" => 12,

        ),

    ),

);

Name 1 仍然是由于 value!=0 两者Category N

Name 2由于 两者中的value=0而被过滤掉Category N

Name 3 仍然是由于值= 12 inCategory 2

我的第一个想法是使用array_intersect()。但由于$input是动态的,我不知道它有多少维度(也不知道它们的名字)。


也许我们可以将一个多维数组分解为每个维度的数组?我不确定这是最好的方法。


每一个提示都值得赞赏。


HUX布斯
浏览 112回答 2
2回答

慕盖茨4494581

我认为这可以完成工作。基本上遍历第一个类别(因为它们都具有相同的 Name 值)并提取每个特定 Name N 值的所有字段。如果这些值的总和为 0(如果您可能有负数,还有其他类似的方法),则删除所有这些字段...foreach ( current($input) as $name => $value ) {    // Extract all values    $nameValues = array_column(array_column($input, $name), "value");    if ( array_sum($nameValues) == 0 )  {        // remove values (use & to allow to modify values)        foreach ( $input as &$categories )   {            unset ($categories[$name]);        }    }}print_r($input);

回首忆惘然

使用递归函数浏览您的数组。function Clean($input){&nbsp; &nbsp; if (is_array($input)){&nbsp; &nbsp; &nbsp; &nbsp; foreach($input as $key=>$value){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $output=Clean($value);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($output===null){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }elseif($output==0){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unset($input[$key]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $input[$key]=$output;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return $input;&nbsp;&nbsp;&nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; if ($input==0){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;&nbsp; &nbsp; &nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return $input;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}例子:<?phpfunction Clean($input){&nbsp; &nbsp; if (is_array($input)){&nbsp; &nbsp; &nbsp; &nbsp; foreach($input as $key=>$value){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $output=Clean($value);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($output===null){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }elseif($output==0){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unset($input[$key]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $input[$key]=$output;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return $input;&nbsp;&nbsp;&nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; if ($input==0){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;&nbsp; &nbsp; &nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return $input;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}$input = array(&nbsp; &nbsp; "Category 1" => array(&nbsp; &nbsp; &nbsp; &nbsp; "Name 1" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "value" => 1,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // ... other keys, doesn't matter&nbsp; &nbsp; &nbsp; &nbsp; ),&nbsp; &nbsp; &nbsp; &nbsp; "Name 2" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "value" => 0,&nbsp; &nbsp; &nbsp; &nbsp; ),&nbsp; &nbsp; &nbsp; &nbsp; "Name 3" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "value" => 0,&nbsp; &nbsp; &nbsp; &nbsp; ),&nbsp; &nbsp; ),&nbsp; &nbsp; "Category 2" => array(&nbsp; &nbsp; &nbsp; &nbsp; "Name 1" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "value" => 8,&nbsp; &nbsp; &nbsp; &nbsp; ),&nbsp; &nbsp; &nbsp; &nbsp; "Name 2" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "value" => 0,&nbsp; &nbsp; &nbsp; &nbsp; ),&nbsp; &nbsp; &nbsp; &nbsp; "Name 3" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "value" => 12,&nbsp; &nbsp; &nbsp; &nbsp; ),&nbsp; &nbsp; ),);echo "input:";var_dump($input);$output=Clean($input);echo "output:";var_dump($output);//exit;$input = array(&nbsp; &nbsp; "Name 1" => array(&nbsp; &nbsp; &nbsp; &nbsp; "value" => 1,&nbsp; &nbsp; &nbsp; &nbsp; // ... other keys, doesn't matter&nbsp; &nbsp; ),&nbsp; &nbsp; "Name 2" => array(&nbsp; &nbsp; &nbsp; &nbsp; "value" => 0,&nbsp; &nbsp; ),&nbsp; &nbsp; "Name 3" => array(&nbsp; &nbsp; &nbsp; &nbsp; "value" => 0,&nbsp; &nbsp; ));echo "input:";var_dump($input);$output=Clean($input);echo "output:";var_dump($output);$input = array(&nbsp; &nbsp; "Category A" => array(&nbsp; &nbsp; &nbsp; &nbsp; "Cat B" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Name 1" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "value" => 1,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // ... other keys, doesn't matter&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Name 2" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "value" => 0,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Name 3" => array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "value" => 0,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; ));echo "input:";var_dump($input);$output=Clean($input);echo "output:";var_dump($output);?>结果:input:array(2) {&nbsp; ["Category 1"]=>&nbsp; array(3) {&nbsp; &nbsp; ["Name 1"]=>&nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; int(1)&nbsp; &nbsp; }&nbsp; &nbsp; ["Name 2"]=>&nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; int(0)&nbsp; &nbsp; }&nbsp; &nbsp; ["Name 3"]=>&nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; int(0)&nbsp; &nbsp; }&nbsp; }&nbsp; ["Category 2"]=>&nbsp; array(3) {&nbsp; &nbsp; ["Name 1"]=>&nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; int(8)&nbsp; &nbsp; }&nbsp; &nbsp; ["Name 2"]=>&nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; int(0)&nbsp; &nbsp; }&nbsp; &nbsp; ["Name 3"]=>&nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; int(12)&nbsp; &nbsp; }&nbsp; }}output:array(2) {&nbsp; ["Category 1"]=>&nbsp; array(1) {&nbsp; &nbsp; ["Name 1"]=>&nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; int(1)&nbsp; &nbsp; }&nbsp; }&nbsp; ["Category 2"]=>&nbsp; array(2) {&nbsp; &nbsp; ["Name 1"]=>&nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; int(8)&nbsp; &nbsp; }&nbsp; &nbsp; ["Name 3"]=>&nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; int(12)&nbsp; &nbsp; }&nbsp; }}input:array(3) {&nbsp; ["Name 1"]=>&nbsp; array(1) {&nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; int(1)&nbsp; }&nbsp; ["Name 2"]=>&nbsp; array(1) {&nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; int(0)&nbsp; }&nbsp; ["Name 3"]=>&nbsp; array(1) {&nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; int(0)&nbsp; }}output:array(1) {&nbsp; ["Name 1"]=>&nbsp; array(1) {&nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; int(1)&nbsp; }}input:array(1) {&nbsp; ["Category A"]=>&nbsp; array(1) {&nbsp; &nbsp; ["Cat B"]=>&nbsp; &nbsp; array(3) {&nbsp; &nbsp; &nbsp; ["Name 1"]=>&nbsp; &nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; &nbsp; int(1)&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; ["Name 2"]=>&nbsp; &nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; &nbsp; int(0)&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; ["Name 3"]=>&nbsp; &nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; &nbsp; int(0)&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; }}output:array(1) {&nbsp; ["Category A"]=>&nbsp; array(1) {&nbsp; &nbsp; ["Cat B"]=>&nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; ["Name 1"]=>&nbsp; &nbsp; &nbsp; array(1) {&nbsp; &nbsp; &nbsp; &nbsp; ["value"]=>&nbsp; &nbsp; &nbsp; &nbsp; int(1)&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP