如何解码json,按列值分组,并对每组中的值求和?

简单的提问者

我在 MySQL 中有数据。数据由json数据创建。但是我无法从数据键更改为数组。我想根据库存数量按顺序设置这些数据。

[
{"size":"36","stock":"1"},
{"size":"37","stock":"2"},
{"size":"38","stock":"1"},
{"size":"40","stock":"1"},
{"size":"36","stock":"1"},
{"size":"37","stock":"3"},
{"size":"38","stock":"2"},
{"size":"39","stock":"3"},
{"size":"40","stock":"2"}
]

我想更改为:

array(
'36' => '2',
'37' => '5',
'38' => '3',
'39' => '3',
'40' => '3',
)

我写了这个函数,但它只返回true,我觉得它可以更精致:

function shoesizes($json,$key='size')
{
    $array =  json_decode($json);
    $result = array();
    $sum = 0;
    $i=0;
    foreach((array) $array as $val) {
        if(array_key_exists($key, $val)){ 
            $result[$val->$key][] = (array)$val;  
        }else{
            $result[""][] = $val;
        }
    }   
    $arrsi = array(); 
    foreach ($result as $k => $v) { 
        $sum = 0; 
        foreach ($v as $c => $d) { 
            $sum +=     $d['stock']; 
        }
        $arrsi[$k]= $sum; 
    }
    return ksort($arrsi);

}
米克马克库萨

解码然后迭代数组。如果第一次出现则size存储整数值,如果没有则将新值添加到存储值中。完成后,按结果数组键排序。

代码:(演示

$json = '[
{"size":"36","stock":"1"},
{"size":"37","stock":"2"},
{"size":"38","stock":"1"},
{"size":"40","stock":"1"},
{"size":"36","stock":"1"},
{"size":"37","stock":"3"},
{"size":"38","stock":"2"},
{"size":"39","stock":"3"},
{"size":"40","stock":"2"}
]';

$array = json_decode($json, true);
foreach ($array as $row) {
    if (isset($result[$row['size']])) {
        $result[$row['size']] += $row['stock'];
    } else {
        $result[$row['size']] = (int)$row['stock'];
    }
}
ksort($result);
var_export($result);

输出:

array (
  36 => 2,
  37 => 5,
  38 => 3,
  39 => 3,
  40 => 3,
)

代码审查:

  • ksort()返回一个布尔结果。通过写入return ksort($arrsi);,您只能接收truefalse(并且false只能在出现故障时发生)。http://php.net/manual/en/function.ksort.php一旦你写了ksort($arrsi);然后return $arrsi;你的函数就会返回所需的结果。
  • 您声明,但不要使用,$i以便可以安全地删除该行。
  • 第一个声明$sum = 0;是不必要的,因为您稍后会在第二个循环中重新声明该变量。
  • 您的第一个循环会创建一个不必要的臃肿数据结构。size分配为键当然是正确的步骤。将每组日期存储为新键的子数组超出了您的需要。这导致您必须跟进嵌套循环。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何对按熊猫中的分类列分组的值求和?

如何在Pyspark中按字段对每组相同的值求和

对熊猫中每组的几个列值求和

R 如何按日期分组求和值

熊猫:如何按分组值求和

按每组的行数对列进行分组并对值进行降序排序

如何按列值分组?

如何按R中的分组列求和?

如何在Scala中按列求和数组的值?

熊猫:如何按一列分组并显示每组所有其他列的唯一值计数?

按两列分组,求和、计数并在单独的列中显示输出值(熊猫)

Pandas DataFrame:如何按列中的值分组并从分组值中创建新列

如何按共享列值对CSV行进行分组和求和?

对值进行分组和求和并列出每组中的连续行

如何通过按帐户/ ID /类别分组对值求和?

如何按列值分组到索引中?

如何用熊猫中的交换值按两列分组?

熊猫如何按列中的特定值分组?

如何按列分组并删除或分隔熊猫中的值?

如何按列中的值分组,找到null,然后替换

熊猫:按两列分组,对第一列分组中的第一个值求和

如何解码编码值?

如何在Scala的地图列表中对值求和并将其按关键值分组?

如何按对象的值对对象数组进行分组并在新属性中求和

如何解码json并将json中的值设置为可用的php?

Pandas:如何按连续列值分组

熊猫:分组的DataFrame-将列的值除以每组中该列内某行的值

mysql在多个列中按值分组

熊猫按列中的每个值分组