Доступ к символам в строке с использованием синтаксиса массива

Предположим, что у нас есть этот код $test = 'text';. Какая разница между echo $test[0] и echo $test{0}? Результат тот же.

Хорошо ли обрабатывать переменную, содержащую строку, подобную массиву символов?

3 ответа

Хорошо, я обобщу свои комментарии в качестве ответа:

Процитировать руководство

Строки также могут быть доступны с помощью фигурных скобок, как в $str {42}, для такой же цель. Однако этот синтаксис устарел с PHP 6. Используйте квадратные скобки.

Кроме того, недокументированный, {} accessor также работает для массивов, что делает $foo {$ bar} и $foo [$ bar] полностью эквивалентными. Это просто старый синтаксис для удобства программистов на Perl.

Что касается вашего второго вопроса, если это хорошая практика для обработки строк, например массива символов: Да, если это полезно для вашей задачи, сделайте это. На языках низкого уровня, таких как C, строки являются массивами символов, поэтому вполне естественно относиться к ним так.

НО имейте в виду, что PHP имеет плохую поддержку unicode. Поэтому, если ваша строка находится в многобайтовой кодировке (т.е. UTF-8), это может работать не так, как ожидалось. Лучше использовать многобайтовые функции в этом случае.


Вы можете написать "Привет, я являюсь символом строки $string {0}"

Но вы не можете написать "Привет, я являюсь символом строки $string [0]"

Вы должны использовать знак конкатенации строки, например, "Привет, я характер строки". $Строка [0];


{0} является сокращением для первого символа данной строки (поскольку php основано на нулевом значении) - поэтому $test{0} вернет t

[0] получит первую запись в массиве (опять же, поскольку php основан на нулевом значении).

Нечетность здесь заключается в том, что php обрабатывает строку как массив символов, поэтому первый символ text совпадает с тем, что:

$test = array('t', 'e', 's', 't');
echo $test[0];
// t

licensed under cc by-sa 3.0 with attribution.