Как правильней и в чем различия? Код (Text): $str='12345'; echo $str[2]; echo $str{2}; echo substr($str, 2, 1);
первый вариант выкини как неоднозначный. остальные два правильные. когда-то давно ветренные авторы PHP решили объявить синтаксис $str{$n} как deprecated, но потом одумались и рекомендовали его к использованию. но ты можешь встретить устаревшую цитату -- не верь! ))) разница в том, что для слишком короткой исходной строки $str{$n} выдаст Notice: Uninitialized string offset, а substr() просто вернет пустую строку. где-то встречал утверждение, что isset($str{0}) самый эффективный способ проверки на пустую строку
плох тем, что ты не видишь что имеется в виду -- элемент массива или символ строки. подумай как удобно, что для языка со свободной типизацией катенация строки пишется не так как сложение чисел. реально удобно! но вот с [] вышел косячек Добавлено спустя 3 минуты 19 секунд: у каждого языка своя философия. для C нормально смешивать понятия "символ строки" и "элемент массива". для PHP это не так.
А в чем он заключается? ну вот всю жизнь обращаюсь к строкам как к массивам по причине, что во всех языках это совершенно естественно, и пока не знал проблем. Какая разница, элемент массива или символ строки, если строка - это массив char-ов?
я предупреждал будь внимателен. в мануале упоминаются оба варианта. ты имеешь право на мнение, но не пизди, пожалуйста.
яваскрипту этого очень не хватает... Добавлено спустя 47 секунд: смотря что подразумевается под чаром
у строки тип "строка". она почти в 100% операций и функций интерпретируется не так, как массив (говорю про PHP). примеры можешь сам придумать и испытать.
Да, постоянно приходится писать и на php и на JavaScript, и начинаешь путаться, где + использовать, а где точку...
один символ в заданной кодировке. Это всего лишь подмножество массивов. Выражение $string_var[0] ничем не хуже любого другого. Рассуждения, что хуже, что лучше в этом плане - это, как по мне, субъективные предрассудки.
неа strlen() для двубайтовой кодировки вернет для слова "кот" длину, равную 6 Так что char это не один байт, это именно символ.
А str[0] вернет нулевой символ. Даже если он из двух байт состоит. тоже адекватно скачут по символам. Не половинят
пробуем Код (PHP): $s = "ыдв"; var_dump($s[0], $s[0] . $s[1]); получаем Код (Text): string '�' (length=1) string 'ы' (length=2) Добавлено спустя 4 минуты 17 секунд: вобщем, учитывая намерения перевести пхп на мультибайтные кодировки нативно, есть надежда, что {} будет возвращать символ, а [] в свою очередь байт
хм, шьйорт побъерхи, знач я тупанул чего-то. И правда половинится. Спасибо. надеемся, что и [] будет давать символ, потому что байт в строке никому нафиг не нужен, имхо. Ну и по факту разницы между [] и {} никакой, а говорили что хуже, хуже. Обращение через [] к указанной ячейке памяти. PHP под капотом держит Си. В Си строк нет как таковых. Но есть массивы char. Строки в пхп обрабатываются довольно быстро, что наводит на мысль использования нативных сишных возможностей оперирования памятью, а не тонной костылей.
Речь о PHP. Он кардинально отличается от Си. На чем написан сам интерпретатор роли не играет. Ты понимаешь, что массивы PHP тоже не имеют ничего общего с массивами Си? Он родственник "хешей" в Perl и Python, а нифига не Сишный массив. Вобщем просто признай, что сказал хуйню. Все кто в теме это и так поняли
Та я не гордый в этом плане. Если оказываюсь в итоге не прав - yсирaться не вижу смысла. а вот за это спасибо. Добавлено спустя 8 минут 45 секунд: Прочел и... 1) если массив в PHP и так является двусвязным списком, то какого черта нельзя делать вставку в середину? О_о 2) понял природу одного занятного бага в проекте, связанного именно точками расширения массивов.