Простейшая проверка массива.

Romantik

TeaM PHPClub
Простейшая проверка массива.

Приветствую
Столкнулся с необходимостью проверить наличие в массиве значения

PHP:
$arr= array(1,2,3);
$value= "1";
if(!in_array($value, $arr))
{echo $value." is NOT correct!";}
else
{echo $value." is correct!";}
что заметил:
1. если $value равно 1 или 2 или 3 - TRUE
2. если $value равно 4 или 11 или 0 - FALSE
3. если $value равно 4a или 11a - FALSE
4. если $value равно a1 или а2 - FALSE
но
5. если $value равно 1a или 2b или 3sda TRUE!!!!

если сделать
$arr= array("1", "2", "3");
Тогда корректно.

Почему?
 

-=KPOT=-

Новичок
потомучто проверяет без учета типов данных если написать вместо if(!in_array($value, $arr))
if(!in_array($value, $arr, true))
то все ок

-~{}~ 28.02.04 12:57:

при этом
$value= "1"; это строка получим FALSE
$value= 1; это число получим TRUE
 

Romantik

TeaM PHPClub
Хорошо. Усложню задачу.
Массивы могут быть разные
$arr[1]= array(1,2,3);
$arr[2]= array("ord", "arr");

при этом $value принимает значение $_POST из формы и значит в любом случае как строка.

получается, что в этом случае нужно только
$arr[1]= array("1", "2", "3"); но это не является корректным заданием.
 

Demiurg

Guest
Romantik
так напиши свою функцию и проверяй с учетом того, что тебе надо. in_array пишется в 2 строчки.
 

SideX

Guest
read_env_var

При написании своего движка сайта, я столкнулся с той же проблемой. На мой взгляд надо просто потратить пол часа и написать необходимую функцию. Например вот такая строка

$file = $SOLAR->rvar("file", "text.txt", SC_REQUEST, TP_STRING, "basename");

получает значение переменной file из массивов _GET, _POST или _COOKIE, если она не установлена, то задает значение text.txt и обрабатывает значение функцией basename, ну и соответсвенно приводит к типу STRING. Так же возможно приводить к типу INT FLOAT UINT и т.д.
 

Screjet

Новичок
Найдем отличие этого кода
PHP:
function in_array ( $value, $in_array ){
	foreach ( $in_array as $in_value ){
		if ( $value != $in_value ){
			return false;
		}
	}
	return true;
}
от этого
PHP:
function in_array ( $value, $in_array ){
	foreach ( $in_array as $in_value ){
		if ( $value !== $in_value ){
			return false;
		}
	}
	return true;
}
:)
 

XtremallyPurpur

Новичок
Screjet
Наверно все таки так:
PHP:
function in_array ( $value, $in_array ){
    foreach ( $in_array as $in_value ){
        if ( $value === $in_value ){
            return true;
        }
    }
    return false;
}
 
Сверху