Я знаю, что на этот вопрос уже есть ответ и он принят, но я хотел добавить что-то, что может помочь другим, кто найдет это с помощью поиска.
У меня была такая же проблема, когда я сравнивал массив записей с ключами в массиве PHP, где в моем массиве записей было дополнительное строковое значение.
$_POST["bar"] = array("other");
$foo = array(array("name"=>"foobar"));
foreach($foo as $key=>$data){
$foo[$key]["bar"]="0";
foreach($_POST["bar"] as $bar){
if($bar==$key){
$foo[$key]["bar"]="1";
}
}
}
Исходя из этого, вы можете подумать, что в конце $foo[0]["bar"]
будет равно "0"
, но происходит то, что когда $key = int 0
сравнивалось свободно с $bar = string "other"
, результатом было true
, чтобы исправить это, я строго сравнивается, но затем необходимо преобразовать $key = int 0
в $key = string "0"
, когда массив POST был определен как array("other","0");
Сработало следующее:
$_POST["bar"] = array("other");
$foo = array(array("name"=>"foobar"));
foreach($foo as $key=>$data){
$foo[$key]["bar"]="0";
foreach($_POST["bar"] as $bar){
if($bar==="$key"){
$foo[$key]["bar"]="1";
}
}
}
Результатом было $foo[0]["bar"]="1"
, если "0"
было в массиве POST-баров, и $foo[0]["bar"]="0"
, если "0"
не было в массиве POST-баров.
Помните, что при сравнении переменных ваши переменные могут не сравниваться, как вы думаете, из-за свободной типизации переменных в PHP.