Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak podzielić wyraz(ciąg znaków) na poszczególne znaki(litery)?
Forum PHP.pl > Forum > Przedszkole
Giluś
Cześć zastanawiam się jak podzielić taki ciąg znaków:
  1. $txt = 'Ala ma kota.';

na poszczególne znaki.

Chciałbym to zrobić w tablicy array i żeby to miało taki wygląd


  1. $t = 'Ala ma kota.';
  2. $t[0] // A
  3. $t[1] // l
  4. $t[2] // a
  5. $t[3] // - nic spacja
  6. $t[4] // m
  7. $t[5] // a
  8. $t[6] // - nic spacja
  9. $t[7] // k
  10. $t[8] // o
  11. $t[9] // t
  12. $t[10] // a
  13. $t[11] // .


Edit.:
Wiem że jak to tak wstawię to mi sie dobrze to wyświetli, ale czy jest jakiś inny sposób na wyświetlenie tego ?.

Dodam że maksymalny ciąg znaków będzie posiadał 26znaków.
Pozdrawiam i z góry dziękuje.
wNogachSpisz
  1. <?php
  2. $input = 'ala ma kota';
  3. $output = array();
  4. for ( $ i = 0, $j = strlen($input); $i < $j; $i++ ) {
  5. $output[] = $input{$i};
  6. }
ethann
str_split

  1. <?php
  2.  
  3. $a = 'Ala ma kota.';
  4. $b = str_split($a, 1);
  5.  
  6. ?>
alegorn
jesli potrzebujesz przejsc w petli po kazdym elemencie ciagu znakow mozesz tez skorzystac:
  1. $str = 'ala ma kota.';
  2. $i = str_length($str);
  3.  
  4.  
  5. for($c=0;$c<$i;++$i){
  6. echo $str{$i};
  7. }
wNogachSpisz
A co to za funkcja "str_length" ?
irmidjusz
Oczywiście, jak wszyscy wiemy, forumowiczowi alegorn chodziło o strlen.

A dobrać się do znaków łańcucha można bezpośrednio:

  1. $str = 'ala ma kota.';
  2. for($i = 0, $length = strlen($str); $i < $length; ++$i){
  3. echo $str[$i].'<br />';
  4. }
darko
Jakby komuś str_split nie działało wink.gif
  1. $max = 26;
  2. $arr = array();
  3. foreach(explode(' ', $str) as $s)
  4. {
  5. for($i =0; $i < strlen($s); $i++)
  6. {
  7. if($i > $max)
  8. break;
  9. $arr[] = $s[$i];
  10. }
  11. $arr[] =' ';
  12. }
ethann
Wszystko co piszecie jest bez sensu..
Giluś napisał na początku
Cytat(Giluś)
Wiem że jak to tak wstawię to mi sie dobrze to wyświetli, ale czy jest jakiś inny sposób na wyświetlenie tego ?.

Napisał to odnośnie wybierania pojedynczego znaku ze stringu.

Pytał się jak podzielić wyraz na poszczególne znaki, a konkretniej jak ze stringa zrobić tablicę.
Dostał na samym początku 2 najbardziej poprawne odpowiedzi, cała resztą którą napisaliście to albo autor jest tego świadom albo jest błędnie wykonana.

@darko
Twoje wykonanie jest błędne. Niezależnie jaka wartość będzie podana w zmiennej str na końcu zawsze doda się spacja.
Cytat(Giluś)
Dodam że maksymalny ciąg znaków będzie posiadał 26znaków.

Wnioskując z tego to albo autor przygotuje sobie tylko stringi składające się max z 26 znaków albo najprościej posłuży się funkcją substr.
W Twoim skrypcie ponoć ma się ograniczać długość do 26, ale nie dość, że jest on lekko wymagający [te 2 pętle + explode] to jeszcze podając ciąg znaków o długości równej 26 lub większy i tak otrzymamy tablicę 27 znakową - ostatnim znakiem zawsze będzie spacja.
darko
offtopic.gif
Cytat(ethann @ 22.07.2012, 14:16:28 ) *
@darko
Twoje wykonanie jest błędne. Niezależnie jaka wartość będzie podana w zmiennej str na końcu zawsze doda się spacja.


Dodaj na końcu array_pop i będzie poprawne:
  1. $str = 'Ala ma kota a kot ma Ale';
  2. $max = 26;
  3. $arr = array();
  4. foreach(explode(' ', $str) as $s)
  5. {
  6. for($i =0; $i < strlen($s); $i++)
  7. {
  8. if($i > $max)
  9. break;
  10. $arr[] = $s[$i];
  11. }
  12. $arr[] =' ';
  13. }
  14. echo '<pre>';
  15. array_pop($arr);
  16. print_r($arr);

</OT>
szajens
dobra Panowie, a co jeżeli znajdą się polskie litery? Jak to przeskoczyć? Bo polska litera składa się z dwóch znaków

edit:
dla potomnych
Kod
function str_split_unicode($str, $l = 0) {
    if ($l > 0) {
        $ret = array();
        $len = mb_strlen($str, "UTF-8");
        for ($i = 0; $i < $len; $i += $l) {
            $ret[] = mb_substr($str, $i, $l, "UTF-8");
        }
        return $ret;
    }
    return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}
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.