如何获取不同键的和->;php数组中的值
我将以下字符串转换为json数组。我所要做的就是为如何获取不同键的和->;php数组中的值,php,arrays,json,Php,Arrays,Json,我将以下字符串转换为json数组。我所要做的就是为id\u number组合具有相同值的键,将amount相加到每个键上,并在循环外打印结果值 $response = '{ "nhif":[ { "id_number":"AA112233", "amount":"5", "date":"2018-09-14
id\u number
组合具有相同值的键,将amount
相加到每个键上,并在循环外打印结果值
$response = '{
"nhif":[
{
"id_number":"AA112233",
"amount":"5",
"date":"2018-09-14T20:18:50"
},
{
"id_number":"AA112233",
"amount":"5",
"date":"2018-09-14T19:59:14"
},
{
"id_number":"AA112233",
"amount":"5",
"date":"2018-09-14T09:07:34"
},
{
"id_number":"AA112233",
"amount":"5",
"date":"2018-09-14T09:04:27"
},
{
"id_number":"12345678",
"amount":"5",
"date":"2018-09-14T09:04:21"
}
]
}';
$json_response = json_decode($response, true);
//Start NHIF
foreach ($json_response['nhif'] as $nhif) {
echo ''.$nhif{"id_number"}.' '.$nhif{"amount"}.' '.$nhif{"date"}.'<br/>';
}
//END NHIF
任何解决方法?您可以使用id\u编号对金额
值求和:
$sums = array_reduce($json_response['nhif'], function ($c, $i) {
$c[$i['id_number']] = (isset($c[$i['id_number']]) ? $c[$i['id_number']] : 0) + $i['amount'];
return $c;
}, array());
print_r($sums);
输出:
AA112233 20
12345678 5
如果您使用的是PHP7,这个
isset($c[$i['id_number']]) ? $c[$i['id_number']] : 0
可以简化为
$c[$i['id_number']] ?? 0
您可以使用数组来解决此问题
$response = '{
"nhif":[
{
"id_number":"AA112233",
"amount":"5",
"date":"2018-09-14T20:18:50"
},
{
"id_number":"AA112233",
"amount":"5",
"date":"2018-09-14T19:59:14"
},
{
"id_number":"AA112233",
"amount":"5",
"date":"2018-09-14T09:07:34"
},
{
"id_number":"AA112233",
"amount":"5",
"date":"2018-09-14T09:04:27"
},
{
"id_number":"12345678",
"amount":"5",
"date":"2018-09-14T09:04:21"
}
]
}';
$json_response = json_decode($response, true);
$results = array(); // will map the unique keys with it's sum
//Start NHIF
foreach ($json_response['nhif'] as $nhif) {
if(!isset($results[$nhif['id_number']])) // new key initialized
$results[$nhif['id_number']] = $nhif['amount'];
else
$results[$nhif['id_number']] += $nhif['amount'];
}
//END NHIF
foreach($results as $key => $value) {
echo $key .' '.$value; // printing the result
}
对数组排序[如果数据未排序,则不需要排序]
执行for循环和求和李>
请尝试使用此代码示例,根据问题解决技巧,还有许多其他方法可以解决此问题
$response = '{
"nhif":[
{
"id_number":"AA112233",
"amount":"5",
"date":"2018-09-14T20:18:50"
},
{
"id_number":"AA112233",
"amount":"5",
"date":"2018-09-14T19:59:14"
},
{
"id_number":"AA112233",
"amount":"5",
"date":"2018-09-14T09:07:34"
},
{
"id_number":"AA112233",
"amount":"5",
"date":"2018-09-14T09:04:27"
},
{
"id_number":"12345678",
"amount":"5",
"date":"2018-09-14T09:04:21"
}
]
}';
$data = json_decode($response, true);
usort($data['nhif'], function($a, $b) {
return $b['id_number'] <=> $a['id_number'];
});
//Start NHIF
$amount = 0;
$id_number = null;
foreach($data['nhif'] as $nhif) {
if(($nhif['id_number'] != $id_number) && ($id_number != null)){
echo $id_number. "\t". $amount . "<br />";
$id_number = $nhif['id_number'];
$amount = $nhif['amount'];
}
else{
$id_number = $nhif['id_number'];
$amount = $amount + $nhif['amount'];
}
// echo ''.$nhif{"id_number"}.' '.$nhif{"amount"}.' '.$nhif{"date"}.'<br />';
}
echo $id_number. "\t". $amount . "<br />";
//END NHIF
$response={
“nhif”:[
{
“id_编号”:“AA112233”,
“金额”:“5”,
“日期”:“2018-09-14T20:18:50”
},
{
“id_编号”:“AA112233”,
“金额”:“5”,
“日期”:“2018-09-14T19:59:14”
},
{
“id_编号”:“AA112233”,
“金额”:“5”,
“日期”:“2018-09-14T09:07:34”
},
{
“id_编号”:“AA112233”,
“金额”:“5”,
“日期”:“2018-09-14T09:04:27”
},
{
“身份证号码”:“12345678”,
“金额”:“5”,
“日期”:“2018-09-14T09:04:21”
}
]
}';
$data=json_decode($response,true);
usort($data['nhif'],函数($a,$b){
返回$b['id_number']$a['id_number'];
});
//启动NHIF
$amount=0;
$id_number=null;
foreach($data['nhif']作为$nhif){
if($nhif['id\u number']!=$id\u number)&($id\u number!=null)){
回显$id_编号。“\t”。$amount。“
”;
$id_number=$nhif['id_number'];
$amount=$nhif['amount'];
}
否则{
$id_number=$nhif['id_number'];
$amount=$amount+$nhif['amount'];
}
//回显'.$nhif{“id_number”}.'.$nhif{“amount”}.'.$nhif{“date”}.
';
}
回显$id\u号码。“\t”$数量“
”;
//结束NHIF
您可以创建一个新数组,例如$r
,并检查$nhif['id\u number']
的键是否已经存在
如果是,则使用+=
为$nhif['amount']
添加值。如果没有,请使用=
此示例使用?:
运算符:
$r = [];
foreach ($json_response['nhif'] as $nhif) {
isset($r[$nhif['id_number']]) ? $r[$nhif['id_number']] += $nhif['amount'] : $r[$nhif['id_number']] = $nhif['amount'];
}
我认为这个答案可能会有帮助[PHP JSON数组-按相同值分组]()。基本上,您需要重新构造JSON数组,使其按相同的id_编号“分组”。所以,一旦结构正确,您只需要迭代它并执行求和逻辑。我为PHP5.xy编辑了它。在我看来,您的描述并没有说明太多。也许您需要对代码进行注释,以便更好地解释“数组”在何时何地排序有什么区别?如果数组未排序,则不需要排序。数组是否排序无关紧要。代码以相同的方式循环所有项。排序只需要时间,没有区别
$r = [];
foreach ($json_response['nhif'] as $nhif) {
isset($r[$nhif['id_number']]) ? $r[$nhif['id_number']] += $nhif['amount'] : $r[$nhif['id_number']] = $nhif['amount'];
}