Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP] preg_match_all

Napisany przez: kreatiff 18.01.2014, 20:28:20

  1. $txt = '80 plus 20 minus';
  2. http://www.php.net/preg_match_all('#\d+|plus#', $txt, $wynik);
  3.  
  4. http://www.php.net/echo'<pre>'. http://www.php.net/var_dump($wynik[0]) ,'</pre>';


$wynik[0]:
  1. http://www.php.net/array(3) {
  2. [0]=> string(2) "80"
  3. [1]=> string(4) "plus"
  4. [2]=> string(2) "20"
  5. }


Czy można jakoś ustawić preg_match_all, by w wyniku 80 było integerem, podobnie jak 20, a plus pozostawał stringiem?
Czyli:
  1. http://www.php.net/array(3) {
  2. [0]=> int(80)
  3. [1]=> string(4) "plus"
  4. [2]=> int(20)
  5. }

Napisany przez: tomxx 18.01.2014, 20:38:14

  1. <?php
  2. $txt = '80 plus 20 minus';
  3. http://www.php.net/preg_match_all('#\d+|plus#', $txt, $wynik);
  4.  
  5. foreach($wynik[0] as &$element)
  6. {
  7. # sprawdza, czy string zawiera liczbę
  8. if((int)$element)
  9. # jeśli tak, to rzutuje na (int)
  10. $element = (int) $element;
  11. }
  12.  
  13. http://www.php.net/echo'<pre>'; http://www.php.net/var_dump($wynik[0]); http://www.php.net/echo '</pre>';
  14. ?>

Napisany przez: kreatiff 18.01.2014, 20:44:53

Czyli rozumiem, że samo preg_match_all nie ma takiej możliwości.

O rzutowaniu myslałem, ale chciałem się dowiedzieć czy może idzie to zrobić szybciej już na etapie wyłuskiwania danych.

Znalazłem krótsze dla mnie rozwiązanie, bo tablica będzie i tak zapisywana w JSON.
Wystarczy do json_encode dodać stałą JSON_NUMERIC_CHECK (PHP 5.3.3+):

  1. http://www.php.net/echo json_encode($wynik[0], JSON_NUMERIC_CHECK);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)