Задачи по 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
Оставить комментарий