2012-07-13 33 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));