|
|
|
| привет всем
есть строка примечания к оплаченому счету
"оплата за то-то и то-то за май, апрель .... по счету №...."
как оптимально из нее выдернуть (сформировать массив) месяцев, по которвым была произведена оплата в данном счете ?
Спасибо! | |
|
|
|
|
|
|
|
для: larush
(12.09.2007 в 11:11)
| | Не очень понятно, вам только названия месяцев нужны или дата? | |
|
|
|
|
|
|
|
для: cheops
(12.09.2007 в 11:22)
| | именно месяца, чтобы автоматом проставить что за такие-то месяца по таким-то контрагентам проплаты прошли. Просто бывает что платим раз в квартал, а то и в пологода (в зависимости от договора, приложений к нему),причем сумма за первый квартал может отличаться от суммы за второй. Но данных о том какие изменения в договорах, в базе нету, вот и работаем задним числом - если в примечании написаны 3 месяца, то и сумму делим на 3 и делаем пометки... | |
|
|
|
|
|
|
|
для: larush
(12.09.2007 в 11:27)
| | То есть в примечании не один месяц указывается, а два и более? Или это значение плавающее? | |
|
|
|
|
|
|
|
для: Indemion
(12.09.2007 в 11:30)
| | плавающее...я могу предположить что в строке надо искать через strpos() "январь", "Январь","февраль","Февраль"и т.д... но это решение в лоб, а ниче более изящного нету ? | |
|
|
|
|
|
|
|
для: larush
(12.09.2007 в 11:33)
| |
<?php
$month = array("январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь");
$line = "оплата за то-то и то-то за мАй, апрEль .... по счету №....";
$line = strtolower($line); #переводим данные в нижний регистр
for ($i=0; $i <= 11; $i++)
{
if (substr_count($line,$month[$i]) == 1) echo "оплата произведена за: ".$month[$i]."<br />";
}
?>
|
Если подумать, то можно и элегантнее сделать :) | |
|
|
|
|
|
|
|
для: larush
(12.09.2007 в 11:33)
| | я не стал заморачиваться с регистрами, а стоит.. использую ваш совет
$str=array();
$q_d = "select * from rashod";
$r_d = mysql_query($q_d);
$month[1]='январ;
...
$month[12]='деабр';
while ($z=mysql_fetch_array($r_d))
{
$str="";
for ($i = 1; $i <=count($month); $i++)
{
if(strpos($z['rs_prim'],$month[$i]))
{
$str[]= $month[$i];
}
}
//и вот в массиве названия месяцев по данной строке поиска $str[]
}
|
стал анализировать и столкнулся вот с чем- в некоторых счетах написано не за июнь, а "в июне".. пришлось обрезать Ь во всех месяцах :-) | |
|
|
|
|
|
|
|
для: larush
(12.09.2007 в 12:01)
| | C "май" так не прокатит. Как вариант поместить в массиве еще 12 месяцев с окончанием "е" и расширить цикл до 23.
Плюс надо учитывать, чтобы в "то-то и то-то" не было слова или части слова в котором содержится название месяца.
Можно сделать такую проверку:
<?php
if (substr_count($line,$month[$i]) > 1) echo "Внимание, месяц: ".$month[$i]." встречается несколько раз!<br />";
?>
|
| |
|
|
|
|
|
|
|
для: Indemion
(12.09.2007 в 12:11)
| | да, наверное так и надо. Спасибо за помощь ! | |
|
|
|
|
|
|
|
для: larush
(12.09.2007 в 11:11)
| |
<?php
$quote = "оплата за то-то и то-то за май, апрель .... по счету №....";
$p = "/(январь|февраль|март|апрель|май|июнь|июль|"
. "август|сентябрь|октябрь|ноябрь|декабрь)/";
preg_match_all($p, $quote, $res);
print_r($res);
?>
|
| |
|
|
|