首页 > 解决方案 > 如何爆炸以下字符串

问题描述

我如何爆炸以下字符串

$str = "ProductId=123, Name=Ancient Roots, Modern Pursuits, Country=India, City=Bangalore, Price=3368"

这样输出数组将包含

[
    "ProductId" => "123",
    "Name" => "Ancient Roots, Modern Pursuits",
    "Country" => "India",
    "City" => "Bangalore",
    "Price" => "3368" 
]

我试图用“逗号”爆炸,然后每个元素再次爆炸“等于”。

$arr = explode(",", $str);

然后再次

$prodarr = explode("=", $arr[0]);  
$product["ProductId"] = $prodarr[1]

但是当值中存在另一个逗号时面临问题,例如名称“Ancient Roots,Modern Pursuits”

标签: php

解决方案


您的结构非常脆弱,无法破坏。但是你仍然可以尝试解析它。

先爆开=。您将拥有下一个键和当前值。

然后循环这些并展开,并选择下一个键的最后一个元素和所有以前的部分作为值(样本):

<?php
$str = "ProductId=123, Name=Ancient Roots, Modern Pursuits, Country=India, City=Bangalore, Price=3368";

$chunks = explode('=', $str);
$keys = [];
$values = [];

foreach ($chunks as $i => $chunk) {
    $parts = explode(',', $chunk);

    if ($i != count($chunks) - 1) {
        $keys[] = trim(array_pop($parts));
    }

    if ($i != 0) {
        $values[] = implode(',', $parts);
    }
}

var_dump(array_combine($keys, $values));

推荐阅读