Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] dzielenie ciagu znaków
Forum PHP.pl > Forum > PHP
kłulik
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?
dr_bonzo
str_split()
kłulik
Ale str_split() jest dopiero w PHP5, a ja muszę mieć kod zgodny z PHP4. W PHP4 nie ma funkcji podobnej do str_split()?
hwao
  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 ?:-)
kłulik
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. ?>
bendi
  1. <?php
  2.  $aMatches = array();
  3. preg_match( '%([0-9]{3})([0-9]{3})?([0-9]{3})?%', $sString, $aMatches );
  4. print_r( $aMatches );
  5. ?>
kłulik
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.
bendi
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.