2 回答

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);

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)
}
}
}
}
- 2 回答
- 0 关注
- 111 浏览
添加回答
举报