双爆炸弦

时间:2013-09-24 20:03:09

标签: php arrays explode

给定是一个包含两个不同分隔符的字符串:

$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'
           )
)

爆炸字符串并将其带入数组的最明智的方法是什么?

4 个答案:

答案 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);
?>