Php ile Json olarak gelen metin biçimindeki sayılar hakkında?
Merhabalar php cURL yardımı ile Gib üzerinde yaptığım bir sorgulamada aldığım verilerde json olarak dönen sayılar metin olarak saklandığı için tablolama olarak kullandığım kendoGrid'in excel fonksiyonu bu dataları metin olarak dikkate alıp Excel'e gönderiyor. Veri tabanımda yaptığım sorgulamalarda ise sayılar metin olarak gelmediği için Excel'e aktarıldığında sayı olarak algılanıyor.
Bu metin olarak gelen sayıları nasıl sayı olarak çekebilirim? Php tarafında bu işlemi yaptırmak istiyorum.
{
"toplam":"109.51",
"tarih":"2021-05-03",
"paraBirimi":"TRY",
"tesisatNo":"",
"zaman":"18:54:38",
"odenecek":"118.27",
"vergi":"8.76",
"gonderimSekli":"KAGIT"
}
Eğer değerleri aşağıdaki gibi alabilirsem sorunum çözülecek.
{
"toplam":109.51,
"tarih":"2021-05-03",
"paraBirimi":"TRY",
"tesisatNo":"",
"zaman":"18:54:38",
"odenecek":118.27,
"vergi":8.76,
"gonderimSekli":"KAGIT"
}
NOT: Gelen veri json olarak gelmekte ben json_decode($tokenDispatch, true)["data"]["FATURASONUC"]
yapıp içindeki değerlere ulaşıyorum sonra tekrar encode kendoGrid ile okutuyorum.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (2)
is_numeric()
ile değeri kontrol edip eğer true
dönüyorsa geriye (float)
olarak döndürebilirsin. Örnek bir fonksiyon;
function convertData($data) {
return array_map(function($value) {
if (is_numeric($value)) return (float) $value;
return $value;
}, $data);
}
kullanırkende
$data = [
'toplam' => '109.51',
'tarih' => '2021-05-03',
'paraBirimi' => 'TRY',
'tesisatNo' => '',
'zaman' => '18:54:38',
'odenecek' => '118.27',
'vergi' => '8.76',
'gonderimSekli' => 'KAGIT'
];
var_dump(convertData($data));
/*
array(8) {
["toplam"]=>
float(109.51)
["tarih"]=>
string(10) "2021-05-03"
["paraBirimi"]=>
string(3) "TRY"
["tesisatNo"]=>
string(0) ""
["zaman"]=>
string(8) "18:54:38"
["odenecek"]=>
float(118.27)
["vergi"]=>
float(8.76)
["gonderimSekli"]=>
string(5) "KAGIT"
}
*/
// ya da json çıktısı
echo json_encode(convertData($data));
/*
{
"toplam": 109.51,
"tarih": "2021-05-03",
"paraBirimi": "TRY",
"tesisatNo": "",
"zaman": "18:54:38",
"odenecek": 118.27,
"vergi": 8.76,
"gonderimSekli": "KAGIT"
}
*/
Teşekkür ederim Tayfun hocam sayenizde sorunu çözdüm.
function convertData($array) {
if (is_numeric($array)) return (float)$array;
return $value;
}
foreach ($faturalar as $key => $val)
{
$faturalar[$key]["toplam"] = convertData($faturalar[$key]["toplam"]);
$faturalar[$key]["odenecek"] = convertData($faturalar[$key]["odenecek"]);
$faturalar[$key]["vergi"] = convertData($faturalar[$key]["vergi"]);
$faturalar[$key]["oran"] = $faturalar[$key]["vergi"] * 100 /$faturalar[$key]["toplam"];
}
// var_dump($faturalar);
echo json_encode($faturalar);