好奇幾個問題:
https://imgur.com/IbDlzIW (資料多筆,其中的兩筆)
這種格式,如果想要把它⋯⋯
{"charm":1,"hp":1}, {"charm":2,"hp":1}
{"charm":3,"hp":2}
{"charm":1,"hp":2}
{"charm":3,"ccc": 2, "hp":1}
{"aaa":3,"bbb":2, hp":2}
能怎麼做?感謝各路好手
1.前端運算的話,你有map、reduce可以用。
2.存到資料庫的話,除非你用nosql,要不然通常會轉成正規的資料庫欄位處理。
直接存json string通常是沒辦法的辦法。
然後我同意星空大...
這算是我最後一次幫你了。
你最好仔細看明白聽明白。
一般會存成json格式的,大多就是會有不確定數量或key名稱的東西。
也就是不穩定的參數值才會存成json處理。
自然,存成json如果需要對其值做一些操作控制的情況下。就得要做額外的處理。
所以,這樣的寫法。並沒有好與不好。有無問題等等。
這些全取決在工程師的能力及規劃上。
別人寫的,可能有其用意。如果你推測不出來用意。一般就是兩種情況。
原工程師寫的不好
或是你看不懂意義。
你覺得你會當哪一種呢?
<?php
$strIN = '[{"charm":1,"hp":1}, {"charm":2,"hp":1}]';
$arrIN = json_decode($strIN, true);
$charm = 0;
$hp = 0;
foreach ($arrIN as $key => $value) {
$charm = $charm + $value["charm"];
$hp = $hp + $value["hp"];
}
$arrOUT = array(
"charm" => $charm,
"hp" => $hp
);
$strOUT = json_encode($arrOUT);
echo $strOUT;
?>
選我正解
等於是把 json string 當真正的 json 先 json_decode 變 array
我輸出來的 json 是
"score": [
"{\"charm\":1,\"hp\":1}",
"{\"charm\":2,\"hp\":1}"
]
海綿,這樣真的會讓他學不會啦。
不過說真的,答案已經出來了。還搞不定。
這......好吧。現在覺得海綿你的做法很對了。
海綿寶寶把答案給他了,我才寫的...
function sumForArray($v1,$v2)
{
return array(
"charm" => $v1["charm"] + $v2["charm"],
"hp" => $v1["hp"] + $v2["hp"],
);
}
$strIN = '[{"charm":1,"hp":1}, {"charm":2,"hp":1}]';
$arrIN = json_decode($strIN, true);
print_r(array_reduce($arrIN,"sumForArray"));
https://ideone.com/QwdNuf#stdin
sumForArray可以改寫成萬用的,只要設定array抓不到key時的預設值就行了。
這還是我第一個PHP程式...(茶
少問了一個
因為 {"charm":1,"hp":1}
也會有其他 key 就像 {"charm":1, "ccc": 2,"hp":1}
而且 key 會重複
這是有怎樣函數可以解決呢
{"charm":2, "ccc": 2,"hp":1}
你這樣子下次沒人敢直接給你答案了。
這就是我說的,你不會不懂人家用json資料的用意。
如果真的有運算需要,就是額外處理。
而且說真的,你用 froce 給你的萬用寫法。去改寫一下也行啊。
為何一直要等人家寫出來給你。
麻煩你自已寫個程式碼處理出來吧。就算是錯誤的也沒關係。
to froce
好像懂 sumForArray 的用意,我試試
from functools import reduce
d1 = {
'charm': 1,
'ccc': 2,
'hp': 3
}
d2 = {
'charm': 2,
'hp': 4
}
arr = [d1, d2]
def sumDict(v1, v2):
allKeys = set(list(v1.keys()) + list(v2.keys())) #取所有key的聯集
result = dict()
for k in allKeys: #對所有key做累加
result[k] = v1.get(k, 0) + v2.get(k, 0) #用dict.get()給預設值
return result
print(reduce(sumDict, arr))
https://ideone.com/cYzKSH
懶得跟PHP折騰,用python寫,自己去照著實現。
to froce
好的,感謝