2013-06-19 13 views
7

wiem, że ciągi w php są ciągi ..... ale na przykład mogę zrobićStruny jako tablice w PHP

$str = 'String'; 
echo $str[0]; 
echo $str[1]; 

//result 
S 
t 

echo count($str) 
//result 
1 

Dlaczego mogę chodzić koryta je jak w tablicy, ale nie można ich policzyć z liczbą? (Wiem, że mogę użyć strlen())

+1

Ponieważ indeksowanie do ciągu znaków z '[]' jest cukrem syntaktycznym. Ciągi nie są tablicami w PHP. – Tomalak

Odpowiedz

20

Bo tak to działa. Możesz uzyskać dostęp do określonych przesunięć bajtów przy użyciu nawiasów. Ale to nie znaczy, że ciąg jest tablicą i że można używać funkcji, które oczekują na nim tablic. $string[int] to cukier syntaktyczny dla substr($string, int, 1), nic więcej, nic mniej.

+0

Wolę nazywać je * przesunięciami znaków *, ale masz rację co do cukru. – GolezTrol

+2

LOL, dobrze komentowany czasowo. Cóż, są one * nie * przesunięciem znaków! Spróbuj: '$ s = '漢字'; $ s [1]; ' – deceze

+0

LOL, naprawdę dobry czas. Zamiast "znaków", powinienem używać "punktów kodowych", ale "bajtów" wydaje się odnosić zbyt wiele do podstawowej struktury i zakłada, że ​​PHP nie jest i nigdy nie będzie UTF16 lub jakimkolwiek innym wielobajtowym zestawem znaków. Muszę przyznać, że nie jestem pewien, i nie mogę znaleźć tego, co doktorowie mają do powiedzenia na ten temat. – GolezTrol

6

Ponieważ ciągi nie są tablicami. Pozwalają ci znaleźć litery używając tej samej składni dla twojej wygody, ale o to chodzi.

Tablice mogą mieć również klucze i mogą być sortowane. Jeśli łańcuchy były pełnymi tablicami, można nadać każdej literze klucz lub sortować litery alfabetycznie za pomocą jednej z funkcji tablicowych.

Krótka historia: ciąg nie jest tablicą, nawet jeśli niewielka część ich składni jest podobna.

+1

Myślę, że ważne jest rozróżnienie między "literami" i * przesunięciami bajtów *. :) – deceze