#php
#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;
Есть идеи, как мне это сделать?
Ответ №1:
Это должно сделать
$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. Вероятно, Дэвид намеревается снова разделить ее с помощью ‘:’, чтобы получить, т.е.
$arr['day high'] = 921.50
Ответ №2:
Сначала вы могли бы разделить на <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. о, ты опередил меня в этом. Однако мой работает на наносекунды быстрее. 😛
Ответ №3:
$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);
Ответ №4:
Использование сопоставления строк (особенно регулярных выражений) в 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];