PHP

$a = "12345"'; $a[$a[1]] = "h"; echo $a; // Выведет 12h45 Почему так?

Потому что 12345 это строка. Строку можно иначе представить как массив символов. то есть 1 это $a[0], а 5 это $a[4]. Соответственно $a[1] хранит в себе число 2. Значит $a[$a[1]] тоже самое, что $a[2]. Далее меняем символ в этой ячейке на символ "h" и потому получается, что тройка заменяется на "h"
UPD: обращайтесь. Отвечу на интересующие вопросы. Пишите в агент или на почту скиньте более удобный для Вас способ связи
UPD: Ни чего я не напутал. Просто не сказал про преобразование типов. Спасибо, за уточнение
Dato Amisulashvili
Dato Amisulashvili
13 852
Лучший ответ
Максим Завитаев немного напутал. $a[1] хранит в себе не число 2, а символ "2". Но в php очень много неявных преобразований, что часто приводит к недоразумениям - в частности, если попытаться использовать строку как число, php автоматически попытается преобразовать ее в число, что тут и происходит.

Самая большая, по моему мнению, глупость php на эту тему - это то, что if("непустая строка") будет выполняться, как будто там истинное условие - кроме строки "0". А вот строка "0.0" уже не пустая, хотя 0.0 рассматривается как ложное условие...
Все просто.
$a = "12345"'; ---создается массив из символов

$a[$a[1]] = "h"; -------изменить элемент массива на h

echo $a; -- вывод
Sergei Kazunin
Sergei Kazunin
4 997
$a[0] == "1"
$a[1] == "2"
$a[2] == "3"
....
Нумерация эл-в массива начинается с нуля.