|
|
|
| Всем привет. Вот обрабатываю 3 варианта цен, которые хранятся в базе:
<?php
$str = '<span class="price">220, 180, 120</span> <u><b>грн.</b></u>';
$pattern = '|<span class=\"price\">(.*?)</span>|';
preg_match_all($pattern, $str, $out);
echo "<pre>";
print_r($out);
echo "</pre>";
?>
<?php
$str = '<b>от</b> <span class="price">120</span> <u><b>грн.</b></u>';
$pattern = '|<span class=\"price\">(.*?)</span>|';
preg_match_all($pattern, $str, $out);
echo "<pre>";
print_r($out);
echo "</pre>";
?>
<?php
$str = '<b>от</b> <span class="price">150</span> <b>до</b> <span class="price">250</span> <u><b>грн.</b></u>';
$pattern = '|<span class=\"price\">(.*?)</span>|';
preg_match_all($pattern, $str, $out);
echo "<pre>";
print_r($out);
echo "</pre>";
?>
|
Вот как выглядит вывод:
Array
(
[0] => Array
(
[0] => 220, 180, 120
)
[1] => Array
(
[0] => 220, 180, 120
)
)
Array
(
[0] => Array
(
[0] => 120
)
[1] => Array
(
[0] => 120
)
)
Array
(
[0] => Array
(
[0] => 150
[1] => 250
)
[1] => Array
(
[0] => 150
[1] => 250
)
)
|
Как мне отличить допустим первый вывод от второго? т.к. они разные..первый содержит значение "фиксированый", а второй "от"...все мне это нужно для заполнения полей на форме...т.е. выбираю изделие и из базы дергает значение цены, и это значение сперва очищается от хтмл кода и потом должно поместится в соответствующие поле...а их 3....
1-е для "фиксированного" значения
2-е для "от"
3-е для "до"
Прошу помощи. | |
|
|
|
|
|
|
|
для: TetRiska
(18.10.2009 в 14:08)
| | >3 варианта цен, которые хранятся в базе
как-то непродуманно держать в базе данных одно и то-же поле с тремя видами записей такого html
из которого нужны только цифры
, и не понятно как одним и тем-же выражением совпадающем в некоторых случаях два раза можно вообще пройтись сразу напимер по нескольким рядам.(что с третьим видом даст цифру 2 в результате возвращаемом preg_match_all)
Вообще многое не понятно из вопроса
нужно именно просто отличить, т.е проверить на наличие слова "от" или ещё и +слова "до",
или нужно получить цифры при этом получив ещё подтверждение вида записи
что-то вроде получения массива
preg_match('#^(<b>от</b>\s*)?<span[^>]*>([^<]+)</span>\s*(?:<b>до</b><span[^>]*>([^<]+)</span>)?#', .....непроверял
где $1 будет говорить о том было-ли "от" а значение в $3 подтвердит что было "до"
, или просто приделайте к первому выражению (<b>от</b>\s*)? получите $1 как отличие первого от второго | |
|
|
|