PHP json-like-string拆分

red*_*der 1 php string split

我有这个$ str值:

[{\"firstname\":\"guest1\",\"lastname\":\"one\",\"age\":\"22\",\"gender\":\"Male\"},{\"firstname\":\"guest2\",\"lastname\":\"two\",\"age\":\"22\",\"gender\":\"Female\"}]
Run Code Online (Sandbox Code Playgroud)

我想将其拆分为以下内容:

firstname:guest1,lastname:one,age:22
firstname:guest2,lastname:two,age:22
Run Code Online (Sandbox Code Playgroud)

我尝试了explode (",",$str),但它爆炸所有使用,作为分隔符,我没有得到我想要的

有人可以帮帮我吗?

Bol*_*ock 5

正如Josh K指出的那样,看起来很像JSON字符串.也许你应该用json_decode()它来获取你正在寻找的实际数据,所有数据都很好地组织成一个对象数组.

编辑:看起来你的字符串本身用双引号括起来",所以在你能够将它解码为有效的JSON之前你必须将它们修剪掉:

$str_json = trim($str, '"');
$guests = json_decode($str_json);
var_dump($guests);
Run Code Online (Sandbox Code Playgroud)

我得到了这个输出var_dump(),所以它绝对是有效的JSON:

array(2) {
  [0]=>
  object(stdClass)#1 (4) {
    ["firstname"]=>
    string(6) "guest1"
    ["lastname"]=>
    string(3) "one"
    ["age"]=>
    string(2) "22"
    ["gender"]=>
    string(4) "Male"
  }
  [1]=>
  object(stdClass)#2 (4) {
    ["firstname"]=>
    string(6) "guest2"
    ["lastname"]=>
    string(3) "two"
    ["age"]=>
    string(2) "22"
    ["gender"]=>
    string(6) "Female"
  }
}
Run Code Online (Sandbox Code Playgroud)

JSON(JavaScript Object Notation)不是CSV(逗号分隔值).它们是两种截然不同的数据格式,因此您无法像另一种那样解析它们.

要获取两个字符串,请使用循环来获取每个对象的键和值,然后使用这些值构建字符串:

foreach ($guests as $guest) {
    $s = array();

    foreach ($guest as $k => $v) {
        if ($k == 'gender') break;
        $s[] = "$k:$v";
    }

    echo implode(',', $s) . "\n";
}
Run Code Online (Sandbox Code Playgroud)

输出:

firstname:guest1,lastname:one,age:22
firstname:guest2,lastname:two,age:22
Run Code Online (Sandbox Code Playgroud)

(假设您确实想要出于某种原因排除性别;如果没有,请删除该if ($k == 'gender') break;行.)