|
|
|
| Задано некоторое слово! С какой буквы оно начинается?
Как в PHP можно решить эту задачу? | |
|
|
|
|
|
|
|
для: patriot
(14.09.2005 в 16:53)
| |
$text = "слово";
echo $text[0];
|
| |
|
|
|
|
|
|
|
для: P@Sol
(14.09.2005 в 16:57)
| | Лучше так, чтобы не путалось с массивами:
$text = "слово";
echo $text{0};
|
| |
|
|
|
|
|
|
|
для: isset
(14.09.2005 в 17:24)
| | А ничего оно и не путается строка - это и есть массив символов. | |
|
|
|
|
|
|
|
для: Евгений Петров
(14.09.2005 в 17:33)
| | isset тут прав.
В php есть трабла с преоброзованием типов
Из мануала
<?php
$a = "1"; // $a это строка
$a[0] = "f"; // А как же смещение строки? Что произойдет?
?>
Поскольку PHP (по историческим причинам) поддерживает индексирование в строках с использованием такого же синтаксиса, как и при индексировании массива, вышеприведенный пример приводит к проблеме: следует ли $a стать массивом, первым элементом которого будет "f" или "f" должна стать первым символом строки $a?
|
| |
|
|
|
|
|
|
|
для: Artem S.
(14.09.2005 в 17:57)
| | Не вижу проблеммы:
<?
$a = "l";
$a[0] = "f";
print_r($a);
?>
|
Легко видеть что $a не стало "ассоциативным" массивом а осталось строкой. | |
|
|
|
|
|
|
|
для: Евгений Петров
(14.09.2005 в 18:15)
| | А что подумает другой программист когда увидит этот код? Ведь вы пошли проверили, не сразу сказали что останется строкой... | |
|
|
|
|
|
|
|
для: isset
(14.09.2005 в 18:25)
| | Я лишь добавлю еще кусок из маунала:
Текущая версия PHP воспринимает второе присваивание как определение смещения строки, поэтому $a станет "f", результат же этого автоматического преобразования следует, однако, рассматривать как неопределенный. В PHP 4 для доступа к символам строки был введен новый синтаксис фигурных скобок, используйте этот синтаксис вместо вышеприведенного:
|
И http://php.rinet.ru/manual/ru/language.types.string.php#language.types.string.substr
Замечание: Для обеспечения обратной совместимости, вы по-прежнему имеете возможность использовать в тех же целях скобки массива. Однако, начиная с PHP 4, этот синтаксис нежелателен к использованию.
|
PS: Если бы вы читали мануал, у вас бы не возникло подобных "невидений проблем" | |
|
|
|
|
|
|
|
для: isset
(14.09.2005 в 18:25)
| | Ну и что что проверил? Код я привел хотя бы для того чтобы "другой программист" мог удостовериться в этом. | |
|
|
|
|
|
|
|
для: Евгений Петров
(14.09.2005 в 19:37)
| | Представьте вам надо будет разобрать 200 кб пхп-кода. И вы видите запись типа $myarr['f'] =rand(0,9);
Переменная $myarr генерируется на лету (к примеру из бд берется название и потом $$varname) А теперь догадайтесь, $myarr[1] =rand(0,9); меняет элемент с индексом 1 или же второй символ в строке?
Т.е. речь не идет о том что пхп спутает, сделает из строки массив. Нет. Другой рограммист может не понять строка это или массив
[поправлено модератором] | |
|
|
|
|
|
|
|
для: isset
(14.09.2005 в 19:45)
| | С логикой у меня нормально! Из записи $myarr['f'] = rand(0,9) любой нормальный программист сразу скажет, что это НЕ строка а ассоциативный массив следовательно $myarr[1] =rand(0,9); меняет элемент с индексом 1.
Другой рограммист может не понять строка это или массив
По этому могу сказать две вещи:
Во первых переменная $myarr сама за себя говорит что это массив (от. англ array - массив), а во вторых есть такое понятие как комментарии, в которых можно извлеч много полезной информации для себя. | |
|
|
|
|
|
|
|
для: Евгений Петров
(14.09.2005 в 19:55)
| | Ок, немного я не так написал, ошибся:
Представьте вам надо будет разобрать 200 кб пхп-кода. И вы видите запись типа $var[1] =rand(0,9);
Переменная $var генерируется на лету (к примеру из бд берется название и потом $$varname) А теперь догадайтесь, $var[1] =rand(0,9); меняет элемент с индексом 1 или же второй символ в строке?
Комментарии типа "меняем второй символ в строке $var на случайное число от 0 до 9 используя функцию rand" это шиза, коммент объясняет алгоритм и совершенно не должен объяснять все шаги (это (как работает $var[1] =rand(0,9) ) должен знать программист)
Представьте нет комментариев, старый программист умер уже, к БД у вас доступа нет, исходники редактировать вы тоже не можете, как тогда определить?
В мануале имеется замечание, использование [] для строк не рекомендуется. Мануалу уж можно поверить.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: isset
(14.09.2005 в 20:01)
| | Ну хорошо. С вашим вариантом согласен, а теперь представьте что вы видите все тоже самое, но только вместо квадратных скобок стоят фигурные. Вы наивно поверите что это строки? Ведь для массивов так же можно использовать фигурные скобки. И все равно вам придется чесать по всему коду и смотреть что же это за переменная. Может быть такой как я специально написал там фигурные скобки вместо квадратных а може и вовсе не знал, что можно использовать квадратные.
это (как работает $var[1] =rand(0,9) ) должен знать программист
Вы противоречите сами себе. Вы мне пол часа доказываете что если б там стояли фигурные скобки то из этого можно было бы сделать заключение что это строка и в тот же момент говорите мне что программист должен знать что это за переменная и что же на самом деле. | |
|
|
|
|
|
|
|
для: Евгений Петров
(14.09.2005 в 20:12)
| | хм, если честно не знал что к элементу массива можно обращаться из фигурных скобок....
Но все же , в мануале прописано, [] используется для массивов, {} используется для строк.
> Вы противоречите сами себе. Вы мне пол часа доказываете что если б там стояли фигурные скобки то из этого можно было бы сделать заключение что это строка и в тот же момент говорите мне что программист должен знать что это за переменная и что же на самом деле
Здесь немного другое, вас опять подвела логика. Каждый нормальный программист следует по мануалу, поэтому если стоит $var{1} , программист сразу поймет что здесь строка, т.к. в мануале четко прописано, что {} следует использовать только для строк. | |
|
|
|
|
|
|
|
для: isset
(14.09.2005 в 20:18)
| | В таком случае если будет стоять комент "меняем второй символ в строке $var на случайное число от 0 до 9 используя функцию rand", то каждый нормальный программист поймет, что $var - это строка.
Офтоп! | |
|
|
|
|
|
|
|
для: Евгений Петров
(14.09.2005 в 20:22)
| | Кто будет делать такие комментарии? Только если по этому коду учат или кто-то так и не смог понять программирование....
Вывод:
[] - используется для обращения к элементам массива
{} - используется для обращения к символу строки
Это правило закреплено мануалом. | |
|
|
|
|
|
|
|
для: isset
(14.09.2005 в 20:26)
| | Если честно мне только что смешно стало. :) Ладно из чувства уважения к вам и авторам мануала соглашусь с вами, хотя исходя из того что не на всех хостингах есть php выше какой то там версии все же рекомендую использовать []. | |
|
|
|
|
|
|
|
для: Евгений Петров
(14.09.2005 в 17:33)
| | Строка - это набор символов (с) http://php.rinet.ru/manual/ru/language.types.string.php
Массив в PHP- это упорядоченное отображение, которое устанавливает соответствие между значением и ключем. (с) http://php.rinet.ru/manual/ru/language.types.array.php | |
|
|
|
|
|
|
|
для: isset
(14.09.2005 в 18:02)
| | Вообще я имел ввиду не ассоциативный массив php, а массив такой в каком виде он хранится в памяти.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Евгений Петров
(14.09.2005 в 18:10)
| | Значит вы не знаете как хранятся данные в памяти :) Только вот не понятно, что вы там в памяти нашли?
В массивах например ['5'] будет означать элемент с индексом 5,а в строке смещение относительно начала строки на 5 символов. | |
|
|
|