Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] dzielenie ciagu znaków
kłulik
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.01.2005
Skąd: Copa Cabana

Ostrzeżenie: (0%)
-----


Mam ciąg znaków składający się z 3,6,9 itd znaków. W jaki sposób podzielić ten ciąg na elementy tablicym każdy o długości 3 znaków?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


str_split()


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
kłulik
post
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.01.2005
Skąd: Copa Cabana

Ostrzeżenie: (0%)
-----


Ale str_split() jest dopiero w PHP5, a ja muszę mieć kod zgodny z PHP4. W PHP4 nie ma funkcji podobnej do str_split()?
Go to the top of the page
+Quote Post
hwao
post
Post #4


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




  1. <?php
  2. function dziel( $string, $dziel )
  3. {
  4.  $dlugosc = strlen( $string );
  5.  $bedzie = ceil( $dlugosc / $dziel );
  6.  $array = array();
  7.  for( $i=0; $bedzie > $i; $i++ )
  8.  {
  9. $array[] = substr( $string, $i*$dziel, $dziel );
  10.  
  11.  }
  12.  
  13.  return $array;
  14. }
  15.  
  16. print_r( dziel( '1234567890s', 2 ) )
  17. ?>

Moze tak ?:-)
Go to the top of the page
+Quote Post
kłulik
post
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.01.2005
Skąd: Copa Cabana

Ostrzeżenie: (0%)
-----


Wykombinowałem coś takiego. Może komuś sie przyda.
  1. <?
  2. function string_split($str, $start=0, $limit=0){
  3. $len = strlen($str);
  4. $len = $len/3;
  5. for($i=0; $i<$len;$i++){
  6. $str = substr($str, $start, $limit);
  7. $limit = $limit+3;
  8. $array[] = $str;
  9. }
  10. return $array;
  11. }
  12. ?>
Go to the top of the page
+Quote Post
bendi
post
Post #6





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  $aMatches = array();
  3. preg_match( '%([0-9]{3})([0-9]{3})?([0-9]{3})?%', $sString, $aMatches );
  4. print_r( $aMatches );
  5. ?>


--------------------
Go to the top of the page
+Quote Post
kłulik
post
Post #7





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.01.2005
Skąd: Copa Cabana

Ostrzeżenie: (0%)
-----


OK już sobie poradziłem.

Bendi->ten kod, który podałeś, on dzieli ciąg, ale tylko jeśli składa się z 9 znaków, jeśli znaków jest więcej to w tablicy lądują 3 pierwsze części a pozostałych już nie ma.
Go to the top of the page
+Quote Post
bendi
post
Post #8





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


No fakt nie zwocilem uwagi w pierwszym poscie na itd winksmiley.jpg, ale za to twoj kod mozna nieco uproscic a to dzieki temu ze funkcja string" title="Zobacz w manualu PHP" target="_manual zwraca FALSE jezeli podany ciag znakow jest krotszy niz podany zakres. Polecam tez inicjalizacje zmiennych (ponoc chodzi to wtedy do 9x szybciej), wiec:
  1. <?
  2. function string_split($str, $start=0, $limit=3){
  3.  $array = array();
  4.  while( ( $sSub = substr($str, $start, $limit) ) !== FALSE ) {
  5. $array[] = $sSub;
  6. $limit += 3;
  7. }
  8. return $array;
  9. }
  10. ?>

I tutaj uwaga - jezeli ktos korzysta z rozszserzenia mbstring i chce sobie nadpisac standardowe funkcje stringowe ich odpowiednikami ze wspmnianego wyzej rozszerzenia to nalezy zmodyfikowac kod coby, nie bylo porownania na FALSE poniewaz funkcja mb_substr" title="Zobacz w manualu PHP" target="_manual niestety nie zwraca false jezeli ciag jest za krotki.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 07:37