Php 将包含字符和单词的给定字符串转换为类似于json文件的表
转换此字符串:Php 将包含字符和单词的给定字符串转换为类似于json文件的表,php,arrays,string,Php,Arrays,String,转换此字符串: $string = "doppio(2) frappuccino(1), doppio(1) caramel macchiato(2), doppio(4) caramel macchiato(4), americano(5) frappuccino(1), doppio(1)" 在这里,我们得到了一个将上述字符串转换为json格式的任务,该格式将为我们提供一个类似于php中给出的表 +-------------------+--------+ | cof
$string = "doppio(2) frappuccino(1), doppio(1) caramel macchiato(2), doppio(4) caramel macchiato(4), americano(5) frappuccino(1), doppio(1)"
在这里,我们得到了一个将上述字符串转换为json格式的任务,该格式将为我们提供一个类似于php中给出的表
+-------------------+--------+
| coffee | volume |
+-------------------+--------+
| doppio | 8 |
+-------------------+--------+
| frappuccino | 2 |
+-------------------+--------+
| caramel macchiato | 6 |
+-------------------+--------+
| americano | 5 |
+-------------------+--------+
希望此代码对您有所帮助。 我在自己的机器上运行并测试了它。祝你好运
<?php
$string = 'doppio(2) frappuccino(1), doppio(1) caramel macchiato(2), doppio(4) caramel macchiato(4), americano(5) frappuccino(1), doppio(1)';
$string = str_replace(')', '', $string);
$string = str_replace(',', '', $string);
// "doppio(2 frappuccino(1 doppio(1 caramel macchiato(2 doppio(4 caramel macchiato(4 americano(5 frappuccino(1 doppio(1"
$array = explode(' ', $string);
// Array
// (
// [0] => doppio(2
// [1] => frappuccino(1
// [2] => doppio(1
// [3] => caramel
// [4] => macchiato(2
// ...
// )
$data = [];
if (count($array)) {
for ($i = 0; $i < count($array); ++$i) {
$secondArray = explode('(', $array[$i]);
if (count($secondArray) >= 2) {
if (array_key_exists($secondArray[0], $data)) {
$data[$secondArray[0]] = $data[$secondArray[0]] + $secondArray[1];
} else {
$data[$secondArray[0]] = $secondArray[1];
}
}
}
}
if (array_key_exists('macchiato', $data)) {
$data['caramel macchiato'] = $data['macchiato'];
unset($data['macchiato']);
}
die(json_encode($data));
// {"doppio":8,"frappuccino":2,"americano":"5","caramel macchiato":6}
以下是我对它的看法:
$string = "doppio(2) frappuccino(1), doppio(1) caramel macchiato(2), doppio(4) caramel macchiato(4), americano(5) frappuccino(1), doppio(1)" ;
$arr=preg_split("/\\),? */",$string);
foreach($arr as $v){
$el=explode("(",$v);
if (count($el)==2) $obj[$el[0]]= ($obj[$el[0]]??0)+ $el[1];
}
echo json_encode($obj);
// result:
{"doppio":8,"frappuccino":2,"caramel macchiato":6,"americano":5}
请参见此处的演示:您可以使用正则表达式解析字符串,使用来提取咖啡名称及其数量。然后,您可以按咖啡名称将其分组到结果数组中,以获得所需的结果:
$string = "doppio(2) frappuccino(1), doppio(1) caramel macchiato(2), doppio(4) caramel macchiato(4), americano(5) frappuccino(1), doppio(1)";
preg_match_all('/(\w[\w\s]+)\((\d+)\)/', $string, $matches);
$coffees = array();
foreach ($matches[1] as $key => $coffee) {
$coffees[$coffee] = ($coffees[$coffee] ?? 0) + $matches[2][$key];
}
echo json_encode($coffees, JSON_PRETTY_PRINT);
输出:
{
"doppio": 8,
"frappuccino": 2,
"caramel macchiato": 6,
"americano": 5
}
这些答案中有一个解决了您的问题吗?如果没有,你能提供更多的信息来帮助回答这个问题吗?否则,请考虑将最能解决你的问题的答案标记为(在上/下投票箭头下的复选标记)。看到和