将结构化字符串转换为具有特殊符号的值数组

时间:2018-01-13 14:42:52

标签: php arrays

此字符串从另一个系统输出。我想将这些数据转换为php数组,以便在数据库中创建一些东西。

那么如何将结构化字符串转换为带有特殊符号的值数组?

  

[待定]美国,加拿大,巴西,

     

[活跃]亚洲,澳大利亚,

     

[nonactive]印度,埃及,

我想读取这些数据以输出像数组php:

for (int i = 0; i < this->getSize(); i++)

我尝试过使用:$pending = array("America","Canada","Brazil"); $active = array("Asia","Australia"); $notActive= array("India","Egypt"); parse_ini_stringstrstr,但它们无效。

我没有找到一个简短的想法。你能帮我吗

2 个答案:

答案 0 :(得分:1)

对于提供的字符串,您可以使用substr在结束括号和空格]之后返回字符串中的部分。 然后使用逗号作为分隔符使用explode并使用array_filter删除数组中的空条目(因为字符串末尾仍然有一个逗号,表示空条目)

$strings = [
    "[pending] America,Canada,Brazil,",
    "[active] Asia,Australia,",
    "[nonactive] India,Egypt,"
];

foreach ($strings as $string) {
    preg_replace('/^(\[[^]]+]\s*)(.*)(,)$/', '\2', $string);
    preg_match_all("/(\w+),/", $string, $matches);
    $result = $matches[1];

    // This will be your array with your values
    var_dump($result);
}

Output php

另一个选择是使用带有preg_match_all的正则表达式。

^(\[[^]]+]\s*)(.*)(,)$

你可以捕获3组。然后在替换中,您只使用包含数据的第2组\2

<强>解释

  • 从字符串^
  • 的开头
  • 第1组 - 包括括号和以下空格(\[[^]]+]\s*)
  • 的数据
  • 第2组 - 您要查找的数据(.*)
  • 第3组 - 结尾处的逗号(,)
  • 字符串$
  • 的结尾

第一组将包含括号和以下空格的数据,第二组将包含您要查找的数据,第三组包含逗号。

foreach ($strings as $string) {
    preg_replace('/^(\[[^]]+]\s*)(.*)(,)$/', '\2', $string);
    preg_match_all("/(\w+),/", $string, $matches);
    $result = $matches[1];

    // This will be your array with your values
    var_dump($result);
}

Output php

答案 1 :(得分:0)

使用json_decode()函数

查看此链接了解详情:http://php.net/manual/en/function.json-decode.php