Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将包含字符和单词的给定字符串转换为类似于json文件的表_Php_Arrays_String - Fatal编程技术网

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
}

这些答案中有一个解决了您的问题吗?如果没有,你能提供更多的信息来帮助回答这个问题吗?否则,请考虑将最能解决你的问题的答案标记为(在上/下投票箭头下的复选标记)。看到和