-1

Given 是一个带有两个不同分隔符的字符串:

$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

4 回答 4

6

你可以尝试这样的事情:

$string = '123|foo,456|bar,789|bla';

$output = array();
foreach(explode(',', $string) as $pair) {
    list($id, $val) = explode('|', $pair);
    $output[(int) $id] = $val;
}
于 2013-09-24T20:07:03.220 回答
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.

于 2013-09-24T20:10:57.220 回答
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);
于 2013-09-24T20:13:13.380 回答
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);
?>
于 2013-09-24T20:15:38.507 回答