php - 将PHP字符串中两个字符之间的数字相乘

标签 php json regex parsing

请在最后查看 EDIT。

我正在解析来自外部 URL 的无效 json 数据,我想修改特定键的值。
我想将值与特定键(美分)的值的常数相乘。

如果仔细观察,模式会重复,它以“vk”开头。

如何将“cent”的值与常数(0.887)相乘。

我从外部 URL 解析的示例数据如下所示:
{"0":{"vk":{"cent":21,"bank":1453},"ok":{"cent":4,"bank":2581},"wa":{"cent":4.5,"bank":959},"vi":{"cent":4,"bank":0},"tg":{"cent":4.5,"bank":0},"wb":{"cent":14,"bank":6733},"go":{"cent":5.5,"bank":149},"av":{"cent":2.5,"bank":2139},"av_1":{"cent":59,"bank":0},"fb":{"cent":3,"bank":84},"tw":{"cent":2,"bank":3848},"ot_1":{"cent":59,"bank":0},"ub":{"cent":1,"bank":4042},"gt":{"cent":1,"bank":6835},"ig":{"cent":5,"bank":3094},"ym":{"cent":2,"bank":16},"ym_1":{"cent":59,"bank":0},"ma":{"cent":1,"bank":5282},"mm":{"cent":2,"bank":0},"uk":{"cent":2,"bank":7097},"mb":{"cent":2.5,"bank":2694},"we":{"cent":1,"bank":7010},"bd":{"cent":13,"bank":0},"dt":{"cent":2,"bank":5592},"ya":{"cent":2,"bank":3811},"ya_1":{"cent":59,"bank":0},"mt":{"cent":4,"bank":6468},"oi":{"cent":1.25,"bank":1200},"fd":{"cent":1,"bank":5505},"zz":{"cent":2,"bank":7097},"kt":{"cent":1.5,"bank":6585},"pm":{"cent":1.5,"bank":983},"tn":{"cent":1,"bank":7112},"qq":{"cent":2,"bank":5796},"mg":{"cent":1,"bank":2260},"yl":{"cent":1,"bank":5950},"po":{"cent":2,"bank":5645},"nv":{"cent":2,"bank":3378},"nf":{"cent":2,"bank":6210},"im":{"cent":1.5,"bank":217},"ds":{"cent":1.25,"bank":5796},"vv":{"cent":1,"bank":6685},"lf":{"cent":1.5,"bank":6582},"gp":{"cent":1.5,"bank":6682},"am":{"cent":1,"bank":6674},"tc":{"cent":1,"bank":6683},"dp":{"cent":1,"bank":6324},"yf":{"cent":2,"bank":6587},"op":{"cent":2,"bank":6331},"fx":{"cent":2,"bank":6525},"qr":{"cent":2,"bank":6664},"yk":{"cent":2,"bank":6650},"ls":{"cent":2,"bank":6668},"bl":{"cent":2,"bank":6025},"mu":{"cent":2,"bank":6627},"fu":{"cent":2,"bank":6666},"sg":{"cent":2,"bank":6387},"uu":{"cent":2,"bank":6678},"ua":{"cent":2,"bank":6357},"ab":{"cent":2,"bank":6127},"iv":{"cent":2,"bank":6685},"fy":{"cent":2,"bank":6351},"ce":{"cent":2,"bank":6279},"hm":{"cent":2,"bank":6317},"tx":{"cent":2,"bank":6669},"pl":{"cent":2,"bank":6682},"ip":{"cent":2,"bank":6314},"hw":{"cent":2,"bank":6085},"de":{"cent":1,"bank":6548},"jc":{"cent":2,"bank":6683},"rl":{"cent":2,"bank":6594},"df":{"cent":2,"bank":6353},"ui":{"cent":1.5,"bank":6633},"up":{"cent":2,"bank":6670},"kf":{"cent":1,"bank":6685},"za":{"cent":2,"bank":6683},"da":{"cent":3,"bank":5469},"sq":{"cent":2,"bank":6685},"li":{"cent":2,"bank":6486},"rd":{"cent":2,"bank":6650},"qb":{"cent":2,"bank":6685},"hz":{"cent":2,"bank":6684},"ia":{"cent":2,"bank":6685},"ew":{"cent":1.5,"bank":6681},"ae":{"cent":1,"bank":6654},"gb":{"cent":1,"bank":6681},"cy":{"cent":3,"bank":5642},"qm":{"cent":2.5,"bank":6684},"yb":{"cent":2.5,"bank":6761},"ot":{"cent":2.5,"bank":0}}}{"1":{"vk":{"cent":21,"bank":6},"ok":{"cent":5,"bank":1594},"wa":{"cent":8,"bank":0},"vi":{"cent":7,"bank":3},"tg":{"cent":8,"bank":0},"wb":{"cent":15,"bank":952},"go":{"cent":10,"bank":2},"av":{"cent":4,"bank":1517},"fb":{"cent":3.5,"bank":3},"tw":{"cent":2,"bank":453},"ub":{"cent":2,"bank":610},"gt":{"cent":1,"bank":1511},"sn":{"cent":40,"bank":693},"ig":{"cent":6,"bank":0},"ss":{"cent":1,"bank":1516},"ym":{"cent":2,"bank":1434},"ma":{"cent":1,"bank":1140},"mm":{"cent":2,"bank":0},"uk":{"cent":2,"bank":1447},"me":{"cent":1,"bank":1516},"mb":{"cent":2.5,"bank":262},"we":{"cent":1,"bank":1517},"bd":{"cent":1,"bank":1509},"kp":{"cent":2,"bank":1466},"dt":{"cent":1,"bank":1515},"ya":{"cent":1,"bank":558},"mt":{"cent":4,"bank":1923},"oi":{"cent":2,"bank":474},"fd":{"cent":2,"bank":1448},"zz":{"cent":2,"bank":1509},"kt":{"cent":2,"bank":580},"pm":{"cent":1.5,"bank":1},"tn":{"cent":1,"bank":1499},"qq":{"cent":2,"bank":1022},"yl":{"cent":1,"bank":1459},"po":{"cent":6,"bank":1478},"nv":{"cent":6,"bank":611},"nf":{"cent":6,"bank":1334},"im":{"cent":2,"bank":188},"ds":{"cent":1.5,"bank":187},"vv":{"cent":2,"bank":1453},"ji":{"cent":2,"bank":998},"lf":{"cent":2,"bank":1470},"hu":{"cent":6,"bank":854},"wg":{"cent":4,"bank":991},"rz":{"cent":2,"bank":1408},"la":{"cent":6,"bank":1477},"zh":{"cent":1,"bank":1430},"gp":{"cent":1.5,"bank":1458},"ls":{"cent":6,"bank":1478},"zy":{"cent":6,"bank":1476},"tx":{"cent":6,"bank":1260},"cm":{"cent":6,"bank":1384},"hw":{"cent":6,"bank":853},"ri":{"cent":9,"bank":1476},"za":{"cent":2,"bank":1453},"gl":{"cent":3,"bank":1366},"dh":{"cent":4,"bank":1409},"ot":{"cent":6,"bank":519}}}
我试过的代码:

$json = get_content('tld.xyz/json.php?bank=prices'); 
$data = json_decode($json, true); 
foreach ($decoded_json['cent'] as &$value) 
{ if ($value >= 0){ $value = $value * 0.887; $result[]=$value; } } 
$fin = json_encode($data); 
echo $fin;

编辑:我认为它不是json,可以通过使用正则表达式来解决。我想在 之间找到字符串: , 以及如何将这个数字与我的常数相乘。

任何帮助表示赞赏。我不是网络开发人员,但我有一个小项目,我正在尝试自己解决这个问题,而不是雇用某人。

谢谢你。

最佳答案

<?php
$json = '{"0":{"vk":{"cent":21,"bank":1453},"ok":{"cent":4,"bank":2581},"wa":{"cent":4.5,"bank":959},"vi":{"cent":4,"bank":0},"tg":{"cent":4.5,"bank":0},"wb":{"cent":14,"bank":6733},"go":{"cent":5.5,"bank":149},"av":{"cent":2.5,"bank":2139},"av_1":{"cent":59,"bank":0},"fb":{"cent":3,"bank":84},"tw":{"cent":2,"bank":3848},"ot_1":{"cent":59,"bank":0},"ub":{"cent":1,"bank":4042},"gt":{"cent":1,"bank":6835},"ig":{"cent":5,"bank":3094},"ym":{"cent":2,"bank":16},"ym_1":{"cent":59,"bank":0},"ma":{"cent":1,"bank":5282},"mm":{"cent":2,"bank":0},"uk":{"cent":2,"bank":7097},"mb":{"cent":2.5,"bank":2694},"we":{"cent":1,"bank":7010},"bd":{"cent":13,"bank":0},"dt":{"cent":2,"bank":5592},"ya":{"cent":2,"bank":3811},"ya_1":{"cent":59,"bank":0},"mt":{"cent":4,"bank":6468},"oi":{"cent":1.25,"bank":1200},"fd":{"cent":1,"bank":5505},"zz":{"cent":2,"bank":7097},"kt":{"cent":1.5,"bank":6585},"pm":{"cent":1.5,"bank":983},"tn":{"cent":1,"bank":7112},"qq":{"cent":2,"bank":5796},"mg":{"cent":1,"bank":2260},"yl":{"cent":1,"bank":5950},"po":{"cent":2,"bank":5645},"nv":{"cent":2,"bank":3378},"nf":{"cent":2,"bank":6210},"im":{"cent":1.5,"bank":217},"ds":{"cent":1.25,"bank":5796},"vv":{"cent":1,"bank":6685},"lf":{"cent":1.5,"bank":6582},"gp":{"cent":1.5,"bank":6682},"am":{"cent":1,"bank":6674},"tc":{"cent":1,"bank":6683},"dp":{"cent":1,"bank":6324},"yf":{"cent":2,"bank":6587},"op":{"cent":2,"bank":6331},"fx":{"cent":2,"bank":6525},"qr":{"cent":2,"bank":6664},"yk":{"cent":2,"bank":6650},"ls":{"cent":2,"bank":6668},"bl":{"cent":2,"bank":6025},"mu":{"cent":2,"bank":6627},"fu":{"cent":2,"bank":6666},"sg":{"cent":2,"bank":6387},"uu":{"cent":2,"bank":6678},"ua":{"cent":2,"bank":6357},"ab":{"cent":2,"bank":6127},"iv":{"cent":2,"bank":6685},"fy":{"cent":2,"bank":6351},"ce":{"cent":2,"bank":6279},"hm":{"cent":2,"bank":6317},"tx":{"cent":2,"bank":6669},"pl":{"cent":2,"bank":6682},"ip":{"cent":2,"bank":6314},"hw":{"cent":2,"bank":6085},"de":{"cent":1,"bank":6548},"jc":{"cent":2,"bank":6683},"rl":{"cent":2,"bank":6594},"df":{"cent":2,"bank":6353},"ui":{"cent":1.5,"bank":6633},"up":{"cent":2,"bank":6670},"kf":{"cent":1,"bank":6685},"za":{"cent":2,"bank":6683},"da":{"cent":3,"bank":5469},"sq":{"cent":2,"bank":6685},"li":{"cent":2,"bank":6486},"rd":{"cent":2,"bank":6650},"qb":{"cent":2,"bank":6685},"hz":{"cent":2,"bank":6684},"ia":{"cent":2,"bank":6685},"ew":{"cent":1.5,"bank":6681},"ae":{"cent":1,"bank":6654},"gb":{"cent":1,"bank":6681},"cy":{"cent":3,"bank":5642},"qm":{"cent":2.5,"bank":6684},"yb":{"cent":2.5,"bank":6761},"ot":{"cent":2.5,"bank":0}}}{"1":{"vk":{"cent":21,"bank":6},"ok":{"cent":5,"bank":1594},"wa":{"cent":8,"bank":0},"vi":{"cent":7,"bank":3},"tg":{"cent":8,"bank":0},"wb":{"cent":15,"bank":952},"go":{"cent":10,"bank":2},"av":{"cent":4,"bank":1517},"fb":{"cent":3.5,"bank":3},"tw":{"cent":2,"bank":453},"ub":{"cent":2,"bank":610},"gt":{"cent":1,"bank":1511},"sn":{"cent":40,"bank":693},"ig":{"cent":6,"bank":0},"ss":{"cent":1,"bank":1516},"ym":{"cent":2,"bank":1434},"ma":{"cent":1,"bank":1140},"mm":{"cent":2,"bank":0},"uk":{"cent":2,"bank":1447},"me":{"cent":1,"bank":1516},"mb":{"cent":2.5,"bank":262},"we":{"cent":1,"bank":1517},"bd":{"cent":1,"bank":1509},"kp":{"cent":2,"bank":1466},"dt":{"cent":1,"bank":1515},"ya":{"cent":1,"bank":558},"mt":{"cent":4,"bank":1923},"oi":{"cent":2,"bank":474},"fd":{"cent":2,"bank":1448},"zz":{"cent":2,"bank":1509},"kt":{"cent":2,"bank":580},"pm":{"cent":1.5,"bank":1},"tn":{"cent":1,"bank":1499},"qq":{"cent":2,"bank":1022},"yl":{"cent":1,"bank":1459},"po":{"cent":6,"bank":1478},"nv":{"cent":6,"bank":611},"nf":{"cent":6,"bank":1334},"im":{"cent":2,"bank":188},"ds":{"cent":1.5,"bank":187},"vv":{"cent":2,"bank":1453},"ji":{"cent":2,"bank":998},"lf":{"cent":2,"bank":1470},"hu":{"cent":6,"bank":854},"wg":{"cent":4,"bank":991},"rz":{"cent":2,"bank":1408},"la":{"cent":6,"bank":1477},"zh":{"cent":1,"bank":1430},"gp":{"cent":1.5,"bank":1458},"ls":{"cent":6,"bank":1478},"zy":{"cent":6,"bank":1476},"tx":{"cent":6,"bank":1260},"cm":{"cent":6,"bank":1384},"hw":{"cent":6,"bank":853},"ri":{"cent":9,"bank":1476},"za":{"cent":2,"bank":1453},"gl":{"cent":3,"bank":1366},"dh":{"cent":4,"bank":1409},"ot":{"cent":6,"bank":519}}}';

//JSON supplied is not valid, it misses [] at the beginning and the end
//and it also misses a comma between the keys which is solved by next two lines
$json = str_replace("}{","},{", $json);
$valid_json = '[' . $json . ']';

$data = json_decode($valid_json, true); 

//Copy the current data into new array $na
$na = array_slice($data,0,count($data));

//Change the copy of array $data with cents
foreach($data as $top_key=>$value) {
    $level_arr = $na[$top_key][$top_key];    
    foreach($level_arr as $key=>$item) {
        if ($na[$top_key][$top_key][$key]['cent']>0) {
            $na[$top_key][$top_key][$key]['cent'] = $data[$top_key][$top_key][$key]['cent'] * 0.087;
        }
    }
}

//JSON
echo json_encode($na);

更新 1:

您可以删除 if ($na[$top_key][$top_key][$key]['cent']>0) { - 部分。
//Change the copy of array $data with cents
foreach($data as $top_key=>$value) {
    $level_arr = $na[$top_key][$top_key];    
    foreach($level_arr as $key=>$item) {
            $na[$top_key][$top_key][$key]['cent'] = $data[$top_key][$top_key][$key]['cent'] * 0.087; 
    }
}

//JSON
echo json_encode($na);

更新 2:

以上要求数组的级别为:
[0][0][{whatever key}]['cent]
[1][1][{whatever key}]['cent]
[2][2][{whatever key}]['cent]

如果您想要更大的灵活性而不是依赖顶级 key 和二级 key 是相同的( [0][0], [1][1] 等...)

你可以这样做:(替换上面给出的代码)
//Change the copy of array $data with cents
foreach($data as $top_key=>$second_level) {
    foreach($second_level as $key2=>$value) {
        $level_arr = $na[$top_key][$key2];    
        foreach($level_arr as $key=>$item) {
                $na[$top_key][$key2][$key]['cent'] = (float)$data[$top_key][$key2][$key]['cent'] * 0.087;
        }
    }
}

更新 3:

我错过了改变 $top_key$key2在 update2 中(现在我更正了),但这里的代码几乎相同,但结果是基于实际数据(从外部 API 提供)的两位小数,关键是成本而不是美分。我还将实际常数更改为 0.877 而不是 0.087。
foreach($data as $top_key=>$second_level) {
    foreach($second_level as $key2=>$level_arr) { 
        foreach($level_arr as $key=>$item) {
            $na[$top_key][$key2][$key]['cost'] = 
            number_format(
            (float)$data[$top_key][$key2][$key]['cost'] * 0.877,2
            );
        }
    }
}

关于php - 将PHP字符串中两个字符之间的数字相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61555629/

相关文章:

php - nodejs中的远程mysql数据库连接

php - CakePHP facebook注销 session 没有破坏

javascript - 从 json feed 中删除时间

javascript - 通过node.js插入没有任何模块的语言环境 `json`文件

Javascript location.reload() 丢失参数(空 $_GET)

php - 尝试将 jquery/ajax 实现到 html 页面中

java - Spring Rest 操作将响应转换为类

python - 使用正则表达式省略数字

regex - 字符串中所有连字符周围的空格没有加倍

Java:检查字符串是否以特殊字符结尾或开头