【问题标题】:Count JSON values with PHP [closed]使用 PHP 计算 JSON 值 [关闭]
【发布时间】:2020-11-20 05:18:58
【问题描述】:

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

[
   [
      {
         "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 次为假

【问题讨论】:

  • 这能回答你的问题吗? PHP count JSON array
  • 我投票结束这个问题,因为它是一个基于 JSON 的问题,带有一个无效的 JSON 字符串。

标签: php arrays json multidimensional-array


【解决方案1】:

首先我用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>";

【讨论】:

  • 这正是我想要的,非常感谢
【解决方案2】:

这可能会有所帮助(以小型 Php 数组为例,您需要解码 json 并以类似方式处理):

<?php

$data =
[
    ['id'=>4,'amount'=>2],
    ['id'=>4,'amount'=>3],
    ['id'=>5,'amount'=>5]
];

foreach($data as $item) {
    $ids_amounts[$item['id']][] = $item['amount'];
}

$ids_freqs       = array_map('count',     $ids_amounts);
$ids_sum_amounts = array_map('array_sum', $ids_amounts);

var_dump($ids_amounts);
var_dump($ids_freqs);
var_dump($ids_sum_amounts);

输出:

array(2) {
  [4]=>
  array(2) {
    [0]=>
    int(2)
    [1]=>
    int(3)
  }
  [5]=>
  array(1) {
    [0]=>
    int(5)
  }
}
array(2) {
  [4]=>
  int(2)
  [5]=>
  int(1)
}
array(2) {
  [4]=>
  int(5)
  [5]=>
  int(5)
}

【讨论】:

    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 2012-11-29
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2012-11-28
    • 2021-12-14
    相关资源
    最近更新 更多