首页 > 解决方案 > 使用 PHP 计算 JSON 值

问题描述

我有一个 JSON,我想计算多少次id_pieasa以相同的值出现,多少次garantie_piesa是真或假,这也是 我拥有的 JSONid_piesa的总和:cantitate_piesa

[
   [
      {
         "id_piesa":"7",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"18",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"313",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"312",
         "cantitate_piesa":1,
         "garantie_piesa":false
      }
   ],
   [
      {
         "id_piesa":"68",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"44",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"168",
         "cantitate_piesa":1,
         "garantie_piesa":true
      },
      {
         "id_piesa":"444",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"91",
         "cantitate_piesa":1,
         "garantie_piesa":false
      }
   ],
   [
      {
         "id_piesa":"168",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"44",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"308",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"1",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"27",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"26",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"65",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"74",
         "cantitate_piesa":1,
         "garantie_piesa":true
      }
   ],
   [
      {
         "id_piesa":"82",
         "cantitate_piesa":1,
         "garantie_piesa":false
      }
   ],
   [
      {
         "id_piesa":"120",
         "cantitate_piesa":1,
         "garantie_piesa":false
      }
   ],
   [
      {
         "id_piesa":"120",
         "cantitate_piesa":1,
         "garantie_piesa":true
      }
   ],
   [
      {
         "id_piesa":"71",
         "cantitate_piesa":1,
         "garantie_piesa":false
      }
   ],
   [
      {
         "id_piesa":"168",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"44",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"91",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"444",
         "cantitate_piesa":1,
         "garantie_piesa":false
      }
   ]
]

例如:id_piesa 168 出现 2 次总和 cantitate_piesa 为 2 且 1 次为真 1 次为假

标签: phparraysjsonmultidimensional-array

解决方案


首先我使用 json formater 来获取一个有效的 json 数组https://jsonformatter.curiousconcept.com/然后你可以试试这个:

//decode json array We receive multidimensional array
$t = json_decode('[
   [
      {
         "id_piesa":"7",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"18",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"313",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"312",
         "cantitate_piesa":1,
         "garantie_piesa":false
      }
   ],
   [
      {
         "id_piesa":"68",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"44",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"168",
         "cantitate_piesa":1,
         "garantie_piesa":true
      },
      {
         "id_piesa":"444",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"91",
         "cantitate_piesa":1,
         "garantie_piesa":false
      }
   ],
   [
      {
         "id_piesa":"168",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"44",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"308",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"1",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"27",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"26",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"65",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"74",
         "cantitate_piesa":1,
         "garantie_piesa":true
      }
   ],
   [
      {
         "id_piesa":"82",
         "cantitate_piesa":1,
         "garantie_piesa":false
      }
   ],
   [
      {
         "id_piesa":"120",
         "cantitate_piesa":1,
         "garantie_piesa":false
      }
   ],
   [
      {
         "id_piesa":"120",
         "cantitate_piesa":1,
         "garantie_piesa":true
      }
   ],
   [
      {
         "id_piesa":"71",
         "cantitate_piesa":1,
         "garantie_piesa":false
      }
   ],
   [
      {
         "id_piesa":"168",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"44",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"91",
         "cantitate_piesa":1,
         "garantie_piesa":false
      },
      {
         "id_piesa":"444",
         "cantitate_piesa":1,
         "garantie_piesa":false
      }
   ]
]',true);

//This will be our new array with statistic data
$newArr = [];

//Looping arrays
foreach($t as $s) {
  foreach($s as $arr) {
      // We'll use id_piesa for keys in our $newArr, here we check if record
      // with this key exists in the new array 
      if(!array_key_exists($arr['id_piesa'], $newArr))
      {
         // if not create new record and assign cantitate_piesa
         $newArr[$arr['id_piesa']] = [
           'id' => $arr['id_piesa'],
            'cantitate_piesa_sum' => (int)$arr['cantitate_piesa']          
         ];
         // check if garantie_piesa is TRUE or FALSE and count that 
         // for this record
         if($arr['garantie_piesa'] == true) {
           $newArr[$arr['id_piesa']]['countTrue'] = 1;         
         } else {
           $newArr[$arr['id_piesa']]['countFalse'] = 1;
         }
       } else {
         // record exists so just add to it cantitate_piesa
         // from array being looped
         $newArr[$arr['id_piesa']]['cantitate_piesa_sum'] = 
         $newArr[$arr['id_piesa']]['cantitate_piesa_sum'] + (int)$arr['cantitate_piesa'];
         // again check if garantie_piesa is TRUE or FALSE and count that 
         // for this record
         if($arr['garantie_piesa'] == true) {
            $newArr[$arr['id_piesa']]['countTrue'] = $newArr[$arr['id_piesa']]['countTrue']+1;
         } else {
           $newArr[$arr['id_piesa']]['countFalse'] = $newArr[$arr['id_piesa']]['countFalse']+1;
           }
        }    
    }
}

    echo "<pre>";
    var_dump($newArr);
    echo "</pre>";

推荐阅读