Ошибки языка PHP или что это тогда?

12 3
Master812
На сайте с 23.12.2007
Offline
168
1233

Есть скрипт и файл с датами. Если СЕГОДНЯШНЯЯ дата совпадает с одной из тех дат,которые есть в файле, то скрипт должен вывести "ДА", если не совпадает, выводит "НЕТ".

Данные записаны в файл очень просто:

14.10.2009
15.10.2009
16.10.2009
17.10.2009

БЕЗ всяких пробелов и других знаков.

Сам скрипт вот:


//забиваем его в массив
$date_mass=file('date.txt');

//устанавливаем текущую дату
$date=date("d.m.Y");

//забъем date_mass в цикл, чтобы проверить каждое значение массива
$temp=count($date_mass)-1;
for($i=$temp; $i>=0; $i--)
{
//проверяем и определяем есть ли good ответ
if($date==$date_mass[$i]) {$goodotvet="ДА!";}
else{$badotvet="НЕТ!";}
}
//выведем good ответ (если он есть) либо bad ответ
if($goodotvet){echo $goodotvet;}
else{echo $badotvet;};

По идее все должно работать. Но! Значение массива date_mass НИКОГДА не будет равно значению текущей даты, даже если сегодняшняя дата есть в date.txt

Вопрос 1: Почему ни одно значение массива date_mass (даты, записанные в массив) при проверке на совпадение с СЕГОДНЯШНЕЙ датой (15.10.2009) не выдало ответ "ДА"???

Чтобы все заработало, нужно сделать уровнять значение массива с любой другой переменной и потом уже ее саму а не массив сравнить с текущей датой! Вот:


//немножко обработаем
$per=$date_mass[$i];
$per=trim($per);

//проверяем и определяем есть ли good ответ
if($date==$per) и далее все как обычно (см. выше)


Вопрос 2: Почему при передачи значения от массива к переменной "per" и обработки ее с помощью "trim" все работает?
Ведь мы ж не ставили никаких пробелов, когда записывали даты в файл!

Вот РАБОТАЮЩИЙ скрипт целиком:


//забиваем его в массив
$date_mass=file('date.txt');

//устанавливаем текущую дату
$date=date("d.m.Y");

//забъем date_mass в цикл, чтобы проверить каждое значение массива
$temp=count($date_mass)-1;
for($i=$temp; $i>=0; $i--)
{

//немножко обработаем
$per=$date_mass[$i];
$per=trim($per);

//проверяем и определяем есть ли good ответ
if($date==$per) {$goodotvet="ДА!";}
else{$badotvet="НЕТ!";}

}

//выведем good ответ (если он есть) либо bad ответ
if($goodotvet){echo $goodotvet;}
else{echo $badotvet;};
raspberry pi сайт ( https://4raspberrypi.ru/ ) и orange pi сайт ( https://orangepi.su/ ) и новостной движок ( https://generalscript.ru/ )
Dreammaker
На сайте с 20.04.2006
Offline
569
#1

символы отвечающие за перенос строки.

Master812
На сайте с 23.12.2007
Offline
168
#2

Dreammaker, блин... понятно. Спасибо!

В книжки про эти знаки не слова не сказано((( Вот что значит покупать книги забугорных авторов, потом новичку пол дня приходится сидеть и разбираться.

[Удален]
#3

ненеавижу невежество. громкий заголовок зато!

DI
На сайте с 03.01.2007
Offline
123
#4
Master812:
В книжки про эти знаки не слова не сказано

А про типы данных там тоже ничего нет? Интересный конечно способ сравнения даты.

Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
NZ
На сайте с 20.09.2009
Offline
12
#5

Улыбнуло :-)

Слава Шевцов
На сайте с 23.07.2005
Offline
370
#6

ТС, правильный скрипт:

//забиваем его в массив

$date_mass=file('date.txt');

//устанавливаем текущую дату
$date=date("d.m.Y");

//забъем date_mass в цикл, чтобы проверить каждое значение массива
$temp=count($date_mass)-1;
for($i=$temp; $i>=0; $i--)
{
echo "{$date}=={$date_mass[$i]}<br>"; // Узнаём, что на самом деле в переменных.
//проверяем и определяем есть ли good ответ
if($date==$date_mass[$i]) {$goodotvet="ДА!";}
else{$badotvet="НЕТ!";}
}
//выведем good ответ (если он есть) либо bad ответ
if($goodotvet){echo $goodotvet;}
else{echo $badotvet;};
Неизменность точки зрения неизменно порождает иллюзию понимания.
T
На сайте с 13.01.2009
Offline
50
#7

Слава Шевцов, про foreach слышал ?

[Удален]
#8
Troytft:
Слава Шевцов, про foreach слышал ?

foreach греховный путь.

Тебя прельщает темная сторона силы, юный падаван.



$numbers=range(0,1000);
foreach ($numbers as $key=>$value)
{
$numbers[$key]=range(0,1000);
}

foreach ($numbers as $id=>$value)
{
foreach ($value as $key=>$num)
{
$numbers[$id][$key]=$num*1000+$value;
}
}


теперь замени все foreach на for и сравни время выполнения

Слава Шевцов
На сайте с 23.07.2005
Offline
370
#9
Troytft:
Слава Шевцов, про foreach слышал ?

Я добавил в код человека лишь одну echo-строчку, которая позволяет быстро тестировать свой глючный php-софт в большинстве случаев. А foreach ... Извините, но использую только для ассоциативных массивов.

ciber
На сайте с 04.01.2008
Offline
215
#10
Troytft:
Слава Шевцов, про foreach слышал ?

Давай еще фремворк подключим.

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий