为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
HUX布斯 2022-07-09 09:45:02
我有一个这样的二维数组:$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 NName 2由于 两者中的value=0而被过滤掉Category NName 3 仍然是由于值= 12 inCategory 2我的第一个想法是使用array_intersect()。但由于$input是动态的,我不知道它有多少维度(也不知道它们的名字)。也许我们可以将一个多维数组分解为每个维度的数组?我不确定这是最好的方法。每一个提示都值得赞赏。
查看完整描述

2 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

我认为这可以完成工作。基本上遍历第一个类别(因为它们都具有相同的 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);


查看完整回答
反对 回复 2022-07-09
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

使用递归函数浏览您的数组。


function Clean($input){

    if (is_array($input)){

        foreach($input as $key=>$value){

            $output=Clean($value);

            if ($output===null){

                return 0;

            }elseif($output==0){

                unset($input[$key]);

            }else{

                $input[$key]=$output;

            }

        }

        return $input;  

    }else{

        if ($input==0){

            return null;

        }else{

            return $input;

        }

    }

}

例子:


<?php


function Clean($input){

    if (is_array($input)){

        foreach($input as $key=>$value){

            $output=Clean($value);

            if ($output===null){

                return 0;

            }elseif($output==0){

                unset($input[$key]);

            }else{

                $input[$key]=$output;

            }

        }

        return $input;  

    }else{

        if ($input==0){

            return null;

        }else{

            return $input;

        }

    }

}


$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,

        ),

    ),

);




echo "input:";

var_dump($input);


$output=Clean($input);


echo "output:";

var_dump($output);


//exit;


$input = array(

    "Name 1" => array(

        "value" => 1,

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

    ),

    "Name 2" => array(

        "value" => 0,

    ),

    "Name 3" => array(

        "value" => 0,

    )

);


echo "input:";

var_dump($input);


$output=Clean($input);


echo "output:";

var_dump($output);


$input = array(

    "Category A" => array(

        "Cat B" => array(

            "Name 1" => array(

                "value" => 1,

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

            ),

            "Name 2" => array(

                "value" => 0,

            ),

            "Name 3" => array(

                "value" => 0,

            )

        )

    )

);


echo "input:";

var_dump($input);


$output=Clean($input);


echo "output:";

var_dump($output);



?>

结果:


input:array(2) {

  ["Category 1"]=>

  array(3) {

    ["Name 1"]=>

    array(1) {

      ["value"]=>

      int(1)

    }

    ["Name 2"]=>

    array(1) {

      ["value"]=>

      int(0)

    }

    ["Name 3"]=>

    array(1) {

      ["value"]=>

      int(0)

    }

  }

  ["Category 2"]=>

  array(3) {

    ["Name 1"]=>

    array(1) {

      ["value"]=>

      int(8)

    }

    ["Name 2"]=>

    array(1) {

      ["value"]=>

      int(0)

    }

    ["Name 3"]=>

    array(1) {

      ["value"]=>

      int(12)

    }

  }

}

output:array(2) {

  ["Category 1"]=>

  array(1) {

    ["Name 1"]=>

    array(1) {

      ["value"]=>

      int(1)

    }

  }

  ["Category 2"]=>

  array(2) {

    ["Name 1"]=>

    array(1) {

      ["value"]=>

      int(8)

    }

    ["Name 3"]=>

    array(1) {

      ["value"]=>

      int(12)

    }

  }

}

input:array(3) {

  ["Name 1"]=>

  array(1) {

    ["value"]=>

    int(1)

  }

  ["Name 2"]=>

  array(1) {

    ["value"]=>

    int(0)

  }

  ["Name 3"]=>

  array(1) {

    ["value"]=>

    int(0)

  }

}

output:array(1) {

  ["Name 1"]=>

  array(1) {

    ["value"]=>

    int(1)

  }

}

input:array(1) {

  ["Category A"]=>

  array(1) {

    ["Cat B"]=>

    array(3) {

      ["Name 1"]=>

      array(1) {

        ["value"]=>

        int(1)

      }

      ["Name 2"]=>

      array(1) {

        ["value"]=>

        int(0)

      }

      ["Name 3"]=>

      array(1) {

        ["value"]=>

        int(0)

      }

    }

  }

}

output:array(1) {

  ["Category A"]=>

  array(1) {

    ["Cat B"]=>

    array(1) {

      ["Name 1"]=>

      array(1) {

        ["value"]=>

        int(1)

      }

    }

  }

}


查看完整回答
反对 回复 2022-07-09
  • 2 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信