Задачи по php

$a = 'y';
$a++;
echo $a;

++$a;
echo $a;

$a+=1;
echo $a;

$a = $a+1;
echo $a;

Что будет на экране?

array (1, '4' => 1, 'a' => 1, 1);
Вопрос: сможете ли вы, не запуская PHP, сказать какой индекс будет у последнего элемента?


$a = '11';
$b = 'a';
$c = 2;

$a < $b; // true или false?
$b < $c; // true или false?
$c < $a; // true или false?


$str = '2 3 4';
echo $str{$str};
Что будет на экране?


Даны два массива (специально вывожу индексы, буквы латинские):
$a = array (0 => 1, 'a' => 1, 1 => 1, 'b' => 1, 2 => 1, 'c' => 1);
$b = array (0 => 1, 'a' => 1, 'b' => 1, 2 => 1);


К каждому применили функцию ksort:
ksort($a);
ksort($b);
Вопрос: В каком порядке будут распологаться ключи массива $a и $b после применения функции ksort?


$var = strval(TRUE-TRUE);
echo empty($var) ? 'empty' : 'full';
Что выведет оператор 'echo' и почему я не подставил первую строку сразу в empty?


echo floor((0.1+0.7)*10);
Что будет на экране?


Загадка на static и unset. Дано:
function s()
{
static $a = 1;
echo $a++;
unset ($a);
}


array (s(), s());
Что будет на экране?


$a = 0;
var_dump ('all' != $a);
Что будет на экране?
Теги: PHP, задачи
#1

так и не понял почему здесь будет 7...
echo floor((0.1+0.7)*10);

а тут будет тройка

$str = '2 3 4';
echo $str{$str};
Что будет на экране?

Александр, 3.12.2008 - 11:02
#2

Размерность дробных чисел зависит от операционной системы. Обычная максимальная точность доходит до ~1.8е308, что позволяет использовать до 14 десятичных значащих разрядов (64 бита в формате IEEE). В процессе арифметических преобразований неизбежна потеря точности. Например, выражение floor((0.1+0.7)*10) возвратит 7 вместо ожидаемого значения 8, потому что ((0.1+0.7)*10) = 7,99999999... Также невозможно точное сопоставление иррациональных чисел. Поэтому нельзя доверять точности последней цифры дробных чисел и нельзя сравнивать их без округления. Если требуется более высокая точность вычислений, следут использовать функции GMP или BCMath.

admin, 3.12.2008 - 11:41
#3

а во втором примере почему будет тройка?

Александр, 3.12.2008 - 13:04
#4

$str{$str};

Эта запись означает взять символ с номером $str в строке $str. Этот номер $str должен быть целым числом, т.е. идет преобразование из строки в число.

Конвертация строк в числа в PHP
Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль). Верное числовое значение - это одна или более цифр (могущих содержать десятичную точку), по желанию предваренных знаком, с последующим необязательным показателем степени. Показатель степени - это 'e' или 'E' с последующими одной или более цифрами.

$foo = 1 + "10.5"; // $foo это float (11.5)
$foo = 1 + "-1.3e3"; // $foo это float (-1299)
$foo = 1 + "bob-1.3e3"; // $foo это integer (1)
$foo = 1 + "bob3"; // $foo это integer (1)
$foo = 1 + "3bob"; // $foo это integer (4)
$foo = 1 + "10 Small Pigs"; // $foo это integer (11)
$foo = "10.0 pigs " + 1; // $foo это float (11)
$foo = "10.0 pigs " + 1.0; // $foo это float (11)

Короче говоря php преобразует строку '2 3 4' в число 2, т.к после первого символа "2" идет пробел и на этом php останавливается.

Ну а дальше все ясно: берем 2 символ из строки '2 3 4', но т.к. нумерация в строках начинается с нуля (как в массивах), то этим числом будет 3!

$str = '2 3 4';
echo $str{2}; // равно 3

admin, 3.12.2008 - 13:56
#5

echo floor((0.1+0.7)*10); // будет 7

Вычисления с дробными числами могут происходить с потерей точности. Это связано с невозможностью точно выразить некоторые дроби в десятичной системе счисления конечным числом цифр. Например, 1/3 в десятичной форме принимает вид 0.3333333

Кстати, в MySQL для хранения денег существует тип DECIMAL (данные хранятся в виде строки, потерь в точности не происходит). А если деньги хранить в FLOAT, то можно обнаружить, что деньги "утекают":)

RockTik, 3.12.2008 - 14:16
#6

спасибо за разъяснение :)

Александр, 3.12.2008 - 14:43
#7

оказывается нифига не знаю пыху :)

Cawabunga, 4.12.2008 - 00:57
#8

значит unset не удаляет статик переменные? o_O

Cawabunga, 4.12.2008 - 01:03
#9

плизз помогите с задачей на тему конструктор.
Описать две переменные и выявить наибольшую из них :((

кука, 10.03.2010 - 09:53
#10

не понял про static) почему все-таки выводится 12

nek, 30.09.2011 - 16:14
#11

все нашел ответ в мануале на сайте php) просто в функции unset статической переменной удаляет только локально, то есть в самой функции, если вызвать функцию еще раз то она воостановит предыдущее значение статик переменной)

nek, 30.09.2011 - 16:41
 
английский язык для начинающих
Ашманов Египет Москва РХТУ Россия США Снежинск Таиланд Тушино Урал Челябинская область Яндекс алкоголь английский язык баги база данных безопасность бизнес блоги взлом видео выставка выходные горные лыжи дайвинг дауншифтинг допинг идиотизм инвентарь интернет книги кэширование мозг море музей ноутбук образование оптимизация отдых отпуск пароль плагин пора сваливать программирование программисты путешествия работа работоспособность радиация реклама самогоноварение собеседование социальные сети спам стартап статистика страны тайм-менеджмент техника учеба фантастика фото фриланс хакер экология электронные деньги юмор Ajax CMS DbSimple DDOS email FireFox Google honda htaccess HTML javascript jQuery life md5 MySQL PHP SEO soft SQL vkontakte Web web 2.0 wordpress