亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

過濾掉數組中所有實例的值為 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個贊

我認為這可以完成工作?;旧媳闅v第一個類別(因為它們都具有相同的 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 關注
  • 124 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號