12

Suppose we have this code$test = 'text';. What's the difference between echo $test[0] and echo $test{0}? The result is the same.

Is it a good practice to treat a variable which contains a string like a array of character?

KingCrunch
  • 128,817
  • 21
  • 151
  • 173
Cristian
  • 123
  • 1
  • 1
  • 6
  • 1
    *"What's the diferece betwen echo $test[0] and echo $test{0}? The result is the same."* In conclusion, by the definition of difference, there is no difference. – Waleed Khan Jan 19 '13 at 22:13
  • If there is no diference. Why i should use $foo[n] or $foo{n}? What's the better one? – Cristian Jan 19 '13 at 22:19
  • 2
    To quote the manual: "Strings may also be accessed using braces, as in $str{42}, for the same purpose. However, this syntax is deprecated as of PHP 6. Use square brackets instead." – Fabian Schmengler Jan 19 '13 at 23:44
  • Possible duplicate of http://stackoverflow.com/questions/335205/php-string0-vs-string0?rq=1 – Ragnarokkr Jan 19 '13 at 23:45
  • @fab Why don't you post your comment as an answer? It is the right and full answer to the question. – inhan Jan 20 '13 at 02:51

3 Answers3

20

Okay, I'll aggregate my comments as an answer:

To quote the manual

Strings may also be accessed using braces, as in $str{42}, for the same purpose. However, this syntax is deprecated as of PHP 7 . Use square brackets instead.

Also, albeit undocumented, the {} accessor also works for arrays, which makes $foo{$bar} and $foo[$bar] completely equivalent. It's just old syntax for the convenience of Perl programmers.

Concerning your second question, if it is good practice to treat strings like an array of characters: Yes, if it is useful for your task, do it. In low level languages like C, strings are arrays of characters, so it is quite natural to treat them like that.

BUT keep in mind that PHP has bad unicode support. So if your string is in multi-byte encoding (ie UTF-8), this might not work as expected. Better use the multibyte functions in that case.

Ahmed Aboud
  • 1,232
  • 16
  • 19
Fabian Schmengler
  • 24,155
  • 9
  • 79
  • 111
2

https://www.php.net/manual/en/language.types.string.php

Accessing characters within string literals using the {} syntax has been deprecated in PHP 7.4. This has been removed in PHP 8.0.

So, always use square brackets $str[0].

raveren
  • 17,799
  • 12
  • 70
  • 83
1

You can write "Hello, I am a character of a string $string{0}"

But you can not write "Hello, I am a character of a string $string[0]"

You have to use string concatenation sign like
"Hello, I am a character of a string " . $string[0];

kta
  • 19,412
  • 7
  • 65
  • 47