2012-07-13 37 views
0

我有一个包含有根据下面的示例值的文本变量:如何在我的情况下使用爆炸?

$data = "5:7|4:1|504:2|1:3|" 

而且我想实现这样的效果:

$data[5] = 7; 
$data[4] = 1; 
$data[504] = 2; 
$data[1] = 3; 

我试过爆炸:

$data = explode("|", $data); 

//but it makes $data[0]="5:7"; $data[1]="4:1"; and so on. 

我应该再次使用爆炸吗?它有任何意义,还是有另一种方式?我想问一个提示或帮助。

+0

是,使用'explode'一次。 – deceze 2012-07-13 11:01:05

+0

它会有一种感觉......在这种情况下,你必须使用'explode' func 2次...... – Rikesh 2012-07-13 11:01:24

回答

4

有可能是一个更聪明的方式,但我不喜欢这样写道:

$data = array(); 
foreach (explode("|", $your_data) as $part) 
{ 
    $pieces = explode(':', $part); 
    // Assumes we have 2 pieces, might want to make sure here... 

    $data[$pieces[0]] = $pieces[1]; 
} 

而且,我不知道这是什么数据代表,但请记住,数组键将相互覆盖,因此1:1|1:2将导致只有一个项目的数组(最后一个项目)。采取另一种方法可能是有充分理由的。

+0

辉煌,并以我想要的方式工作。 – Lucas 2012-07-13 14:25:24

1

当然,explode再次:

$data = "5:7|4:1|504:2|1:3"; 
$array = array(); 
foreach (explode('|', $data) as $pair) { 
    list($id, $val) = explode(':', $pair); 
    $array[$id] = $val; 
} 
1

是的,你应该使用两次爆炸,这样

$newData = array(); 
$pairs = explode('|',$data); 
foreach($pairs as $pair){ 
    $tmp = explode(':',$pair); 
    $newData[$tmp[0]] = $tmp[1]; 
} 
0

尝试使用正则表达式:

$data = preg_split ("\||:", $data); 
0

一个行版本:

$data = array_map(function($d) { return (int)explode(":", $d)[1]; }, explode("|", $data));