2011-11-10 98 views
0

我有一個字符串變量,如下所示。我試圖把它分成一個數組,甚至分解成每個元素的變量(變化,日高等)。分裂一個困難的字符串

$a='last: 901.5001 @ 11:35am EST 11/10/2011 <br>change: -5.9999 <br>day high: 
921.50 <br>day low: 882.00 <br>open: 917.50 <br>volume: 808998'; 
echo $a; 

任何想法,我怎麼做到這一點?

回答

1

你可以在<br>第一,然後在第一個冒號拆裂:

$temp = explode("<br>",$a); 
$data = array(); 
foreach ($temp as $item) { 
    list($name, $value) = explode(":", $item, 2); 
    $data[$name] = $value; 
} 

應該輸出:

Array 
(
    [last] => 901.5001 @ 11:35am EST 11/10/2011 
    [change] => -5.9999 
    [day high] => 921.50 
    [open] => 882.00 
    ... etc ... 
) 
+1

aw,你打敗了我。儘管如此,我的速度要快幾納秒。 :P – DampeS8N

+0

我不敢相信這個工作。很簡單!謝謝。 – David19801

2

這應該做

$tmps = explode('<br>', $string); 
$arr = array(); 
foreach($tmps as $tmp){ 
    list($key, $val) = explode(':', $tmp,2); 
    $arr[trim($key)] = trim($val); 
} 
var_dump($arr) 

您可在線路$arr[trim($key)]更改爲$arr[],如果你不關心什麼是以前的:

+0

也許大衛打算再次用':'分割,得到'$ arr ['day high'] = 921.50' – Smamatti

+0

澄清添加到頂部。 – David19801

0
$step_one = explode('<br>', $string); 
foreach($step_one as $step_two) 
{ 
    $step_three = explode(': ', $step_two); 
    $final[$step_three[0]] = $step_three[1]; 
} 
var_dump($final); 

或者得到什麼在你的評論:

$step_one = explode('<br>', $string); 
foreach($step_one as $step_two) 
{ 
    $step_three = explode(': ', $step_two); 
    $final[] = $step_three[1]; 
} 
var_dump($final); 
0

使用HTML的字符串匹配(尤其是正則表達式)可以是危險的,因爲任何微小的變化可能會誤事。但是,如果你的代碼被稱爲是好的:

preg_match_all('/([^:]+):(.+)<br>/U', $a.'<br>', $m, PREG_SET_ORDER); 
$a = array(); 
foreach ($m as $v) $a[$v[1]] = trim($v[2]); 

var_dump($a); 

如果你不想按鍵那麼它只是變成了:

preg_match_all('/:(.+)<br>/U', $a.'<br>', $m, PREG_SET_ORDER); 
$a = array(); 
foreach ($m as $v) $a[] = trim($v[1]); 

甚至:

preg_match_all('/:\s(.+)\s<br>/U', $a.'<br>', $m); 
$a = $m[1];