Загадка про PHP
Загадка про PHP. Есть массив, описанный таким вот образом:
array (1, '4' => 1, 'a' => 1, 1);
Вопрос: сможете ли вы, не запуская PHP, сказать какой индекс будет у последнего элемента?
Дополнение: буква «a» в индексе — латинская
array (1, '4' => 1, 'a' => 1, 1);
Вопрос: сможете ли вы, не запуская PHP, сказать какой индекс будет у последнего элемента?
Дополнение: буква «a» в индексе — латинская
Комментарии 30
(Не проверял)
Не смог. 42? или любой бред;-)
Если верить документации:
, то индексы:
0, '4' (СТРОКА!!!) 'a'(строка), max(0)+1
Но так как PHP сделан по «приципу наибольшего удивления»
(или «через миллениум (с одной н)»),
оказывается, что '4' — не строка…
то не очень
Эту версию я рассматривал первой.
Второй была версия что последний элемент будет с индексом 'a'. (Она совпадает с правильным ответом, разница лишь в том, как понять смысл вопроса).
Третью версию я написал после того, как прочел в справке о том, что 'a'+1 = 'b'.
Никак не предполагал что php будет вставлять индексы в середину массива.
А вообще, такие вещи решаются программой test.php
Кстати, можешь посмотреть вторую задачу.
$b_one = (bool)1;
$ten = 10;
$b_ten = (bool)10; # === TRUE
if ($one == $b_one) {print «1:$one == $b_one\n»;}
if ($one === $b_one) {print «2:$one === $b_one\n»;}
if ($ten == $b_ten) {print «3:$ten == $b_ten\n»;}
if ($ten === $b_ten) {print «4:$ten === $b_ten\n»;}
if ($one == $b_ten) {print «5:$one == $b_ten\n»;}
if ($b_one == $ten) {print «6:$b_one == $ten\n»;} # !!!
print «\n»;
if ($b_one == $b_ten) {print «7:$b_one == $b_ten\n»;}
if ($b_one === $b_ten) {print «8:$b_one === $b_ten\n»;}
if ($b_one == TRUE) {print «9:$b_one == TRUE\n»;}
if ($b_one === TRUE) {print «10:$b_one === TRUE\n»;}
if ($one == TRUE) {print «11:$one == TRUE\n»;}
if ($one === TRUE) {print «12:$one === TRUE\n»;}
Проблема возникает если, например, в функции сравнивать 10 со значеним параметра, думая, что это число
(а получено TRUE или булевский 1 — то есть «булевскость» в функции не видна), то получается
равенство, что не всегда хорошо.
Можно, конечно, все параметры пропускать через явный (int), но это тоже не очень весело.
Лихо, лихо. …А ещё на модуль DOM XML бочку катят!
Точно? Только что проверил — десериализация раза в полтора быстрей полноценного парсинга. Тестовый (генерирующий) скрипт:
for($i=0; 10000>$i; $i++)$a[]=mt_rand()%2?mt_rand():md5(mt_rand());
echo microtime(),"\n";
$fp=fopen('s','w');
fwrite($fp,serialize($a));
fclose($fp);
echo microtime(),"\n";
$fp=fopen('p','w');
fwrite($fp,'? $a='.var_export($a,1).'?'); // около вопросиков добавить угловые скобки
fclose($fp);
echo microtime(),"\n";
Обратный, думаю, сам напишешь :)
Кстати, serialize действительно медленнее, чем var_export.
О чём и сказал (согласен, недостаточно внятно). Как раз в этом обратном случае ты прав, но unserialize быстрее, чем include.
Собственно, ничего удивительного — сравни, какой парсер нужен для одного и для другого случая :)
Я не знаю твоей позиции по XML, поэтому не буду продолжать. :)