[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: if(строка == 0)
Xes
Почемуто выполняются строки после if
Цитата
if($this->links->uri[$idlink] == 0){

Чтобы проверить почему это происходит дабавил ниже echo and print_r
echo $this->links->uri[$idlink]; - содержит строку.
Почему строка равна 0 ? Почему это истенно?

	//Устанавливает значение uri в файле БД
protected function urilink($idlink = null){
if(isset($idlink)){
if($this->links->uri[$idlink] == 0){
echo $this->links->uri[$idlink];
print_r($this->links->uri);
$this->db->links->uri[$idlink] = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$db = json_encode($this->db);
if($fp = fopen($this->pathdb, 'a')){
flock($fp, LOCK_EX);
ftruncate($fp, 0);
fwrite($fp, $db);
fflush($fp);
flock($fp, LOCK_UN);
fclose($fp);
}else{
$this->err = '['.date("d.m.Y H:i:s").'] urilink err1 Ошибка открытия файла для записи uri.'."\n";
$this->errlog();
}
}
}
}


Цитата
Пример клиентской страницы.
Ниже ссылки:
http://test1.ru/klient.phpArray ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 [11] => 0 [12] => 0 [13] => 0 [14] => 0 [15] => 0 [16] => 0 [17] => 0 [18] => 0 [19] => 0 [20] => 0 [21] => 0 [22] => 0 [23] => 0 [24] => 0 [25] => 0 [26] => 0 [27] => 0 [28] => 0 [29] => http://test1.ru/klient.php [30] => http://test1.ru/klient.php )




Спустя 6 минут, 5 секунд (21.09.2011 - 20:44) Winston написал(а):
Поставь тогда эквивалентность
if($this->links->uri[$idlink] === 0){

Спустя 1 минута, 30 секунд (21.09.2011 - 20:45) Xes написал(а):
А каким образом он строку к нулю подвел вообще строка же полюбому true или 1 трактуется а ноль как ноль или false?

Спустя 1 минута, 43 секунды (21.09.2011 - 20:47) Winston написал(а):
Строка == true
0 == false
1 и > 1 true

Спустя 4 минуты, 17 секунд (21.09.2011 - 20:51) Xes написал(а):
Цитата
1 и > 1 true

Не вкурил я этот переход строка истина ноль лож
у меня написано
истенна == лож результат лож должен быть.

Спустя 4 минуты, 21 секунда (21.09.2011 - 20:56) Winston написал(а):
Цитата (Xes @ 21.09.2011 - 20:38)
if($this->links->uri[$idlink] == 0){

Что ты пытаешься проверить этой проверкой ?
Ищешь элемент массива со значением 0 ?



Спустя 44 секунды Winston написал(а):
Цитата (Xes @ 21.09.2011 - 20:38)
( [0] => 0 [

У тебя в этом массиве есть элемент со значением 0
Потому и срабатывает if

Спустя 8 минут, 14 секунд (21.09.2011 - 21:04) Xes написал(а):
Цитата
Что ты пытаешься проверить этой проверкой ?
Ищешь элемент массива со значением 0 ?

if($this->links->uri[$idlink] == 0){

Я проверяю $idlink-ый элемент массива uri (например 29-ый)если он равен нулю то записать информацию на какой странице эта сылка. Т.к. Записи еще небыло. Записали Второй раз там уже есть строка, о которой я говорю а он один фиг пишет туда тоже самое. Хотя не должен так как этот элемент уже не 0 а строка с адресом.

И обпртаня чтука в другой функции
if(in_array($uri, $uris)){
Ищю с троку в массиве этом он мне ее находит это строку с первого раза хотя там только нули, нет там строки такой еще.

Спустя 42 минуты, 16 секунд (21.09.2011 - 21:46) Xes написал(а):
Заменил ноль на "" Пустую строку логика стала нормально работать.
Но вопрос каким образом:
при поиске строки в массиве с одними нулями он находит эту строку так для меня и не понятен.
Цитата
if(in_array($uri, $uris)){ - поидеии должен вернуть фальш


Ну и так же обратная тема элемнт массива когда он уже строка, каким то образом равен нулю
Цитата
if($this->links->uri[$idlink] == 0){

-------------
Соответсвенно первую пустую строку такми методом уже не находит. Есть варианты что заюзать кроме foreach?
$idlink = array_search('', $uris)

Спустя 10 часов, 23 минуты, 53 секунды (22.09.2011 - 08:10) linker написал(а):
Всё просто, при сравнении строк с числами, строка приводится к числу. Строка "ввввв" будет приведена к нулю, строка "123ваывав" будет приведена к числу 123. В твоём случае строка была приведена к нулю за неимением цифирь в её начале. В результате условие срабатывало. В твоём случае подошло бы условие if (строка === 0) {} ну или просто if (строка) {}. В случае с in_array() происходит тоже самое, поэтому в твоём случае подходит условие if (in_array(строка, массив, true)) {}.

P.S. Как вариант не забивать нулями пустые элементы массива.
P.S.P.S. Всегда очень внимательно относимся к тому, как происходит сравнение строк с числами.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.