|
|
|
|
|
для: Jackson
(13.10.2012 в 12:23)
| | данные отправляются на сервер не через сабмит формы, а через jquery post
для эксперимента создал массив с такими данными:
$data = array(
0 => array(5, "test", 12),
1 => -5,
2 => "-5",
3 => 5,
4 => "5",
5 => 0,
6 => "0",
7 => 3.4,
8 => "3.4",
9 => -3.4,
10 => "-3.4",
11 => "test",
12 => 5+"test",
13 => "5test",
14 => "test"+5,
15 => "test5",
16 => 09,
17 => "09",
18 => 0-9,
19 => false,
20 => true,
21 => null,
22 => ""
);
|
и начал пробовать смотреть вывод:
$num = 0;
foreach ($data as $value){
if(gettype($value) == 'integer' && $value > 0){
echo $num." => ".gettype($value)." => ".$value."<br/>";
}
$num++;
}
|
или
$num = 0;
foreach ($data as $value){
if(is_int($value) == true && $value > 0){
echo $num." => ".gettype($value)." => ".$value."<br/>";
}
$num++;
}
|
даст
3 => integer => 5
12 => integer => 5
14 => integer => 5
|
это логически верно, т.к. если мы передаем в пхп обработчик ИД товара (допустим), то он естественно должен быть числовым типом, отличным от ноля
другие примеры не прошли проверку т.к. там проскакивают различные типы данных, хотя в итоге мы получим значение, которые еще придется обработать, но если посудить, зачем пропускать левый тип, который наверняка послан "кем-то"
$num = 0;
foreach ($data as $value){
if(intval($value) > 0){
echo $num." => ".gettype($value)." => ".$value."<br/>";
}
$num++;
}
|
или
$num = 0;
foreach ($data as $value){
if((int)$value > 0){
echo $num." => ".gettype($value)." => ".$value."<br/>";
}
$num++;
}
|
даст
0 => array => Array
3 => integer => 5
4 => string => 5
7 => double => 3.4
8 => string => 3.4
12 => integer => 5
13 => string => 5test
14 => integer => 5
17 => string => 09
20 => boolean => 1
|
| |
|
|
|
|
|
|
|
для: Jackson
(13.10.2012 в 12:54)
| | Я все таки, на 99.999% уверен, что проверяемые данные из формы, просто исхожу из того, что этими нуликами и цифрами автор "наследил" в трех разделах форума.
Ну а почему "0.21" не будет истиной, это ведь число? Данная функция не обязана проверять, что это за число, авторы ее на это не уполномочили.
Я не знаю, чего в конечном итоге хочется автору, но из его изложения могу сказать только одно - число, строка, массив, это разные типы данных, и проверить сразу все на принадлежность к одному, плюс значение, действием "два в одном" не получится. Типы, это типы, а значения, это характеристика типа, так что как бы одно строкой да покрасивее, это из разряда излишних душевных терзаний, не более. | |
|
|
|
|
|
|
|
для: Jackson
(13.10.2012 в 12:43)
| | да, и вовсе не факт, что данные поступают из формы )))
и опять таки, если дать функции is_numeric строку с действительным числом "0.21" будет истина. | |
|
|
|
|
|
|
|
для: confirm
(13.10.2012 в 12:35)
| | попался. действительно форма возвращает всегда строковые значения... | |
|
|
|
|
|
|
|
для: Jackson
(13.10.2012 в 12:30)
| | А если подумать? Если проверяются данные из формы, а это, даже если и содержащие целые числа, строковые значения. А данная функция может вернуть true только именно для целого ЧИСЛА. Об этом ведь даже в описании ее сказано, копирую специально для вас:
Замечание:
Чтобы проверить, что переменная является числом или строкой, содержащей число (как поле ввода в форме, которое всегда является строкой), используйте is_numeric().
А что он будет делать с 08 и т.п., я не знаю, как и не знаю чего он еще захочет проверять, кроме строк, массивов.... | |
|
|
|
|
|
|
|
для: confirm
(13.10.2012 в 12:25)
| | со всем полностью согласен... про строку погорячился.
а проверить, является ли значение переменной целым типом, можно просто функцией is_int($id);
только что автор будет делать дальше, если ему передадут 08 или 09 - это открытый вопрос | |
|
|
|
|
|
|
|
для: Jackson
(13.10.2012 в 12:21)
| | А строка значит все такие 1 будет возвращать? А не наоборот ли?
А почему массив так возвращает, так это вытекает из того, что это простое преобразование булевого значения (равноценно, как если бы проверяли if($array)) в этом случае - false (0) для пустого массива, и true (1) для имеющего элементы. | |
|
|
|
|
|
|
|
для: confirm
(13.10.2012 в 12:11)
| | >А вы внимательно прочли условия автора?
ну мне сразу показалось, что автор хочет проверить целое ли ему число дали или какой то иной тип :) | |
|
|
|
|
|
|
|
для: confirm
(13.10.2012 в 12:19)
| | >>а при массиве и строке - вернет 1...
>
>Это кто такое вернет, преобразование в integer? А не ошибаетесь?
(int) вернет... согласен с замечаниями выше про пустой и заполненный массив - соответственно 0 и 1 будет | |
|
|
|
|
|
|
|
для: Jackson
(13.10.2012 в 12:17)
| | >а при массиве и строке - вернет 1...
Это кто такое вернет, преобразование в integer? А не ошибаетесь? | |
|
|
|
|