2013-09-24 43 views
-1

由於是兩個不同的分隔符的字符串:雙爆串

$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

上逗號爆炸,然後| ?你有沒有使用爆炸功能? – Maximus2012

+0

在逗號上爆炸,循環,在條形上爆炸 – 2013-09-24 20:05:09

+1

您在問題標題中提到了解決方法 - explode()。 –

回答

6

你可以嘗試這樣的事情:

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

$output = array(); 
foreach(explode(',', $string) as $pair) { 
    list($id, $val) = explode('|', $pair); 
    $output[(int) $id] = $val; 
} 
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

+0

這可能比多個大數據爆炸更快嗎? – kero

+0

@kingkero不確定。我認爲這可能可以,因爲你會消除循環結構,有利於使用本地實現的分析指令。我也認爲這將需要更少的內存,而不是擁有多個數組(用於存儲循環數據)。當然,你需要測試以確定。 –

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