Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: intval и мультибайтовая строка
Форумы портала PHP.SU » » Вопросы новичков » intval и мультибайтовая строка

Страниц (1): [1]
 

1. Telnet - 23 Марта, 2015 - 22:39:28 - перейти к сообщению
Всем привет
PHP:
скопировать код в буфер обмена
  1.  
  2.         preg_match_all("#<td align='left'>(.+?)</td>#is", $this->html, $arr);
  3.         $sum = substr(trim($arr[0][2]), 0,-8);
  4.         $val = mb_substr(trim($arr[0][2]), -8);
  5.         var_dump($sum);var_dump(intval($sum));
  6.  

Такой код дает нам
string(24) "7132550" int(0)
т.е как строку он 7132550 а при переводе ее в число пишет 0, а мне перед выводом нужно еще к ней
PHP:
скопировать код в буфер обмена
  1. <?PHP echo number_format($sum, 0, ',', ' ').' '.$val; ?>

а number_format со строками не работает
и как переменную $sum преобразовать в число мне не понятно.
2. DeepVarvar - 23 Марта, 2015 - 23:02:29 - перейти к сообщению
?
3. Telnet - 23 Марта, 2015 - 23:23:44 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2.         preg_match_all("#<td align='left'>(.+?)</td>#is", $this->html, $arr);
  3.         $sum = (int)substr(trim($arr[0][2]), 0,-8);
  4.         $sum = (int)$sum;
  5.         var_dump($sum);
  6.  

выводит
int(0)
4. andrewkard - 24 Марта, 2015 - 00:11:46 - перейти к сообщению
Telnet
А так?
PHP:
скопировать код в буфер обмена
  1.  
  2.         $sum = '7132550';
  3.         $val = $sum + 0;
  4.         var_dump($val);
  5.  
5. GoDr - 24 Марта, 2015 - 08:08:02 - перейти к сообщению
Telnet, а ты правильно регулярку сделал? и вообще обработку?

Если предположить что
PHP:
скопировать код в буфер обмена
  1. $this->html = "<td align='left'>7132550</td><td align='left'>7132550</td><td align='left'>7132550</td>";


то $arr вернёт это
Цитата:
array (size=2)
0 =>
array (size=3)
0 => string '<td align='left'>7132550</td>' (length=29)
1 => string '<td align='left'>7132550</td>' (length=29)
2 => string '<td align='left'>7132550</td>' (length=29)
1 =>
array (size=3)
0 => string '7132550' (length=7)
1 => string '7132550' (length=7)
2 => string '7132550' (length=7)


$arr[0][2] содержит это:
Цитата:
string '<td align='left'>7132550</td>' (length=29)


$sum будет содержать это:
Цитата:
string '<td align='left'>7132' (length=21)


ну и соответственно $val будет таким:
Цитата:
string '550</td>' (length=8)


И как итог, любые int дадут 0

Лучше скажи что у тебя дано и что ты хочешь получить Улыбка
6. Telnet - 24 Марта, 2015 - 10:02:57 - перейти к сообщению
Вот html постуающий на вход
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <table class="vmorder-done"><tr><td class="vmorder-done-payinfo">Способ оплаты</td> <td align='left'><span class="vmpayment_name">Наличными</span><br /></td></tr><tr><td class="vmorder-done-nr">Номер заказа</td> <td align='left'>0b79026</td></tr><tr><td class="vmorder-done-amount">Сумма</td> <td align='left'>6454000 p.</td></tr></table>
  3.  

из него нужно дернуть число 6454000
но оно может быть написано и с пробелами типа 6 454 000
можно попробовать поиска по p. это должно быть всегда
7. GoDr - 24 Марта, 2015 - 10:53:41 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $str = <<<QQQ
  2. <table class="vmorder-done">
  3. <tr><td class="vmorder-done-payinfo">Способ оплаты</td> <td align='left'><span class="vmpayment_name">Наличными</span><br /></td></tr>
  4. <tr><td class="vmorder-done-nr">Номер заказа</td> <td align='left'>0b79026</td></tr>
  5. <tr><td class="vmorder-done-amount">Сумма</td> <td align='left'>6454000 p.</td></tr>
  6. <tr><td class="vmorder-done-payinfo">Способ оплаты</td> <td align='left'><span class="vmpayment_name">Наличными</span><br /></td></tr>
  7. <tr><td class="vmorder-done-nr">Номер заказа</td> <td align='left'>0b79026</td></tr>
  8. <tr><td class="vmorder-done-amount">Сумма</td> <td align='left'>723823 p.</td></tr>
  9. </table>
  10. QQQ;
  11.  
  12.  
  13. preg_match_all("#<td align='left'>\D*([\d]+)\D*</td>#is", $str, $arr);
  14.  
  15. foreach($arr[1] as $value){
  16.     $q = number_format($value, 0, ',', ' ');
  17.     echo $q . '<br>';
  18. }
  19.  
8. Telnet - 24 Марта, 2015 - 11:56:11 - перейти к сообщению
Спасибо GoDr
что то я совсем разучился писать регулярные выражения.

 

Powered by ExBB FM 1.0 RC1