Как сделать регулярное выражение в следующих данных с помощью PHP - PullRequest
0 голосов
/ 11 сентября 2010
// [ { "id": "715320" ,"t" : "500268" ,"e" : "BOM" ,"l" : "15.55" ,"l_cur" : "Rs.15.55" <br>,"ltt":"3:59PM IST" ,"lt" : "Sep 9, 3:59PM IST" ,"c" : "+1.69" ,"cp" : "12.19" <br>,"ccol" : "chg" } ] 

Мне нужно получить каждый с именем и назначить каждому значение

Как
$ id = 715320;
$ e = BOM;

сверхуданные, как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 11 сентября 2010

Поскольку это данные в кодировке JSON, вы можете использовать json_decode , а не регулярное выражение - это гораздо надежнее (обязательно удалите начальный \\, поскольку это комментарий, а не JSON).

Чтобы затем получить данные в именованные переменные:

$array = json_decode($string, true);
foreach ($array as $k => $v){
    $$k = $v;
}

Это приведет к тому, что id, t и т. Д. (Которые теперь являются ключами в массиве $) будут установлены как их собственныепеременные типа $id, $t.

редактировать: как примечания aularon , вы также можете использовать метод extract для перемещения ключей массива в глобальную область видимости..

2 голосов
/ 11 сентября 2010

Ваша строка полностью выглядит как данные JSon. Вы должны использовать JSon методы для анализа содержимого.


Если вы действительно хотите использовать регулярные выражения, вы можете сделать это:

<?php
$yourString = '// [ { "id": "715320" ,"t" : "500268" ,"e" : "BOM" ,"l" : "15.55" ,"l_cur" : "Rs.15.55" 
,"ltt":"3:59PM IST" ,"lt" : "Sep 9, 3:59PM IST" ,"c" : "+1.69" ,"cp" : "12.19" 
,"ccol" : "chg" } ] ';

preg_match_all("/\"(.+?)\"\s*:\s*\"(.+?)\"/", $yourString, $matches, PREG_SET_ORDER);

foreach($matches as $match){
    $resultArray[$match[1]] = $match[2];
}

print_r($resultArray);

?>

Код на ideone


В этом коде вместо переменных используется массив, но если вы действительно хотите использовать такие переменные, как $e, что действительно очень плохая идея, вы можете использовать переменные .

Вы заменяете содержимое foreach следующим: ${$match[1]} = $match[2];


Ресурсы:

По той же теме:

0 голосов
/ 11 сентября 2010

Вам не нужны регулярные выражения, выше приведена нотация объекта JSON, вам нужно сделать на ней php json_decode, получить значения, которые будут ассоциативным массивом:

$str='[ { "id": "715320" ,"t" : "500268" ,"e" : "BOM" ,"l" : "15.55" ,"l_cur" : "Rs.15.55" 
,"ltt":"3:59PM IST" ,"lt" : "Sep 9, 3:59PM IST" ,"c" : "+1.69" ,"cp" : "12.19" 
,"ccol" : "chg" } ] ';

$data=json_decode($str, true); //true to get the data as associative arrays rather than objects.
$data = $data[0];//since it's an object inside an array

отныне рекомендуется хранить это как ассоциативный массив и обращаться к объектам с помощью методов доступа к массивам:

$id = $data['id'];

Функция PHP extract может использоваться для извлечения этих значений в текущий контекст, но это опасно, лучше придерживаться прямого доступа к массиву.

0 голосов
/ 11 сентября 2010

Разве это не просто JSON?Затем взгляните на json_decode .Или есть причина, по которой вам нужно сделать это с помощью регулярных выражений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...