Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Вопрос по php, Странное выполнение условия if
Warenik
сообщение 15.02.2011 - 22:00
Частый гость
***

Группа: Участник
Сообщений: 110
Регистрация: 29.06.2007
Пользователь №: 20825


Есть такая казалось бы простая задача:
массив вида
CODE
array(5) {
["cnt"]=>
int(4)
[0]=>
string(12) "DSC00320.JPG"
[1]=>
string(12) "DSC00327.JPG"
[2]=>
string(12) "DSC00329.JPG"
[3]=>
string(12) "DSC00326.JPG"
}


делаю перебор
CODE
foreach(array as $k => $v)
{
if($k != "cnt")
$print .= $v." ";
}


далее вывожу переменную $print, резльтат:
DSC00327.JPG DSC00329.JPG DSC00326.JPG

Сломал мозг, чего не так?!
Перейти в начало страницы
 
+Цитировать сообщение
Anton99
сообщение 15.02.2011 - 22:23
10 лет на форуме
*******
орден I степениза помощь в дороге9 лет с форумом
Группа: Участник
Сообщений: 8992
Регистрация: 28.01.2007
Пользователь №: 18710


а почему string? не strong?
Перейти в начало страницы
 
+Цитировать сообщение
Nuclear
сообщение 15.02.2011 - 22:58
Это вам не это...
*******

Группа: Участник
Сообщений: 2061
Регистрация: 20.09.2003
Пользователь №: 9


Согласно документации (]]>http://www.php.net/manual/en/language.oper....comparison.php]]>):
Цитата
If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number

То есть при сравнении числа и строки, последняя так же будет преобразована к числу - в данном случае к нулю:
Код
var_dump(0 == "cnt");
var_dump(0 === "cnt");

Код
bool(true)
bool(false)

Таким образом, чтобы в вашем примере условие сработало четыре раза, как и предполагается, необходимо заменить $k != "cnt" (равенство значений после приведения типов) на $k !== "cnt" (идентичность значений без приведения типов).
Перейти в начало страницы
 
+Цитировать сообщение
Warenik
сообщение 20.02.2011 - 20:24
Частый гость
***

Группа: Участник
Сообщений: 110
Регистрация: 29.06.2007
Пользователь №: 20825


Спасибо огромное, попробую
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28.05.2020 - 04:42