给定是一个包含两个不同分隔符的字符串:
$string = '123|foo,456|bar,789|bla';
结果应该是一个数组:
array
(
[123] => 'foo'
[456] => 'bar'
[789] => 'bla'
)
或者:
array
(
[0] => array
(
[id] => 123
[value] => 'foo'
)
[1] => array
(
[id] => 456
[value] => 'bar'
)
[2] => array
(
[id] => 789
[value] => 'bla'
)
)
爆炸字符串并将其带入数组的最明智的方法是什么?
答案 0 :(得分:6)
您可以尝试这样的事情:
$string = '123|foo,456|bar,789|bla';
$output = array();
foreach(explode(',', $string) as $pair) {
list($id, $val) = explode('|', $pair);
$output[(int) $id] = $val;
}
答案 1 :(得分:2)
作为不可避免的双重爆炸的替代方案。如果你知道你有一个结构良好的输入字符串(即键值对中没有=
或&
),你可以试试这个:
$string = '123|foo,456|bar,789|bla';
$array = array();
$search = array('|', ',');
$replace = array('=', '&');
parse_str(str_replace($search, $replace, $string), $array);
var_dump($array);
发生的事情是你正在进行字符串替换,使你的字符串看起来像一个查询字符串。然后,您parse_str()
将其值转换为$array
。
答案 2 :(得分:1)
$string = '123|foo,456|bar,789|bla';
$array = explode(",", $string);
$result = Array();
foreach ($array as $data){
$temp = explode("|", $data);
$result[$temp[0]] = $temp[1];
}
print_r($result);
答案 3 :(得分:1)
You can use this one which returns an array like your second one
<?php
$string = '123|foo,456|bar,789|bla';
$str_arr = explode(',', $string);
$result = array();
foreach($str_arr as $data) {
list($id, $val) = explode('|', $data);
$result[] = array("id"=>$id,'value'=>$val);
}
print_r($result);
?>