Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取不同键的和->;php数组中的值_Php_Arrays_Json - Fatal编程技术网

如何获取不同键的和->;php数组中的值

如何获取不同键的和->;php数组中的值,php,arrays,json,Php,Arrays,Json,我将以下字符串转换为json数组。我所要做的就是为id\u number组合具有相同值的键,将amount相加到每个键上,并在循环外打印结果值 $response = '{ "nhif":[ { "id_number":"AA112233", "amount":"5", "date":"2018-09-14

我将以下字符串转换为json数组。我所要做的就是为
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'];
    }