我在 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);
,您只能接收true
或false
(并且false
只能在出现故障时发生)。http://php.net/manual/en/function.ksort.php一旦你写了ksort($arrsi);
然后return $arrsi;
你的函数就会返回所需的结果。$i
以便可以安全地删除该行。$sum = 0;
是不必要的,因为您稍后会在第二个循环中重新声明该变量。size
值分配为键当然是正确的步骤。将每组日期存储为新键的子数组超出了您的需要。这导致您必须跟进嵌套循环。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句