此字符串从另一个系统输出。我想将这些数据转换为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_string
,strstr
,但它们无效。
我没有找到一个简短的想法。你能帮我吗
答案 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);
}
另一个选择是使用带有preg_match_all
的正则表达式。
你可以捕获3组。然后在替换中,您只使用包含数据的第2组\2
。
<强>解释强>:
^
(\[[^]]+]\s*)
(.*)
(,)
$
第一组将包含括号和以下空格的数据,第二组将包含您要查找的数据,第三组包含逗号。
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);
}
答案 1 :(得分:0)
使用json_decode()函数