分裂困难的字符串

时间:2011-11-10 20:14:25

标签: php

我有一个像下面那样的字符串变量。我试图将它分成一个数组,甚至分成每个元素的单独变量(更改,日高等)。

$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;

我是怎么做到的?

4 个答案:

答案 0 :(得分: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[]更改为:

答案 1 :(得分: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 ...
)

答案 2 :(得分: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);

答案 3 :(得分: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];