[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск даты в массиве.
linf
Мой небольшой опыт показывает, что использование циклов (особенно для сканирования массивов) это очень длительный процесс, и я стараюсь как можно меньше их использовать.

Задача такова, найти дату в значениях массива, без перебора циклом, и если такая (дата) есть, то сделать определенная действие.

есть файл date, где на каждой строке присутствует по дате:
14.10.2009
15.10.2009
16.10.2009
17.10.2009

PHP
//забиваем его в массив
$date_mass File("date");

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

//проверяем
if     (in_array($date$date_mass)) {echo "ДА!";}
else      {echo 
"НЕТ!";}


И не работает, как ни старался пишет "НЕТ!"




Спустя 13 минут, 37 секунд (15.10.2009 - 12:53) glock18 написал(а):
сверяй что ищешь (выведи массив на экран, и значение, которое пытаешь найти). все должно найтись, только

Цитата
Мой небольшой опыт показывает, что использование циклов (особенно для сканирования массивов) это очень длительный процесс, и я стараюсь как можно меньше их использовать.


это совсем уж плохо. Поиск по массиву делается неявно, но вряд ли, если в массиве 1000000 элементов, он останется незаметен. опять же поиск через файл. file () расходует гораздо больше памяти, чем чтение файла построчно/символьно. с другой стороны поиск по базе данных делаться будет гораздо быстрее. в зависимости от размеров. ну и еще 50тыщщ нюансов.

Спустя 3 минуты, 14 секунд (15.10.2009 - 12:56) Michael написал(а):
Проверь
foreach ($date_mass as $v) echo $v.'<br>';}
что выводит.
И проверь кодировки файлов.

Спустя 28 минут, 5 секунд (15.10.2009 - 13:24) Kuliev написал(а):
linf
Не работает наверное потому что функции переданы не правельные параметры
PHP
$date_mass File("date");
//Наверное имелось ввиду что то подобное
// >>>> $date_mass = File("date.txt");

Спустя 6 минут, 33 секунды (15.10.2009 - 13:31) linf написал(а):
Ясное дело, что я массив выводил для проверки, и циклом выводил, и print_r, все в них есть то, что нужно...

что касается date.txt, то какая разница, можно файлы и без расширения создавать...

Спустя 5 минут, 55 секунд (15.10.2009 - 13:37) Kuliev написал(а):
linf
На вот работает
biggrin.gif
PHP
$array file("base.txt");

$date date("d.m.Y");

if(
in_array($date."\r\n",$array))
echo 
"В Массиве присутствует значение ".$date;

else
echo 
"В массиве нет совпадений";

Спустя 1 минута, 52 секунды (15.10.2009 - 13:39) glock18 написал(а):
Цитата
На вот работает

только в винде smile.gif

Спустя 13 минут, 40 секунд (15.10.2009 - 13:52) Kuliev написал(а):
Цитата (glock18 @ 15.10.2009 - 15:39)
Цитата
На вот работает

только в винде smile.gif

Надеюсь что автор понял почему у него не работало как он хотел.

Спустя 4 минуты, 50 секунд (15.10.2009 - 13:57) sergeiss написал(а):
Если у тебя массив дат отсортирован, то вовсе не надо перебор делать последовательным циклом smile.gif Можно просто "тупо" методом половинного деления пройтись. Будет не так уж и много шагов сделано, и результат будет найден.
Например, для 1000 элементов всего не более 10 итераций будет. Причем, вне зависимости от положения величины в массиве.

Спустя 53 минуты, 57 секунд (15.10.2009 - 14:51) linf написал(а):
sergeiss Да там не много, просто не хочу использовать цикл! ДА и перебором, тоже не работает...

Спустя 4 минуты, 43 секунды (15.10.2009 - 14:56) linf написал(а):
НЕ работает! у меня не винда... но мнет кажется дело совсем не в этом...

а нет чего то универсального, а тог мало ли то что я делаю потом на сервере не захочет работать?

Спустя 1 минута, 36 секунд (15.10.2009 - 14:58) Michael написал(а):
Цитата (linf @ 15.10.2009 - 11:51)
sergeiss Да там не много, просто не хочу использовать цикл!

Думаешь в in_array не используется цикл?

Спустя 24 минуты, 18 секунд (15.10.2009 - 15:22) linf написал(а):
Даже через цикл не работает... я вот подозреваю, может $date = date("d.m.Y"); - не строку дает?

Спустя 1 час, 11 минут, 49 секунд (15.10.2009 - 16:34) linf написал(а):
Все дело было в долбанных пробелах... =((( и откуда ни только взялись в массиве, ведь в файле их нет...

Спустя 4 часа, 36 минут, 54 секунды (15.10.2009 - 21:11) ak167 написал(а):
Вот рабочий вариант:

PHP
//забиваем его в массив
$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;};


P.S. Не забудь файл с данными переименовать в date.txt

Спустя 1 час, 12 минут, 26 секунд (15.10.2009 - 22:23) ak167 написал(а):
linf, не работал твой скрипт по двум причинам:
1) ты сравнивал не значение массива а его ключь
2) не почистил значение от знаков переноса строки.

Рабочий вариант:
PHP
//забиваем его в массив
$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;};


_____________
Live in new format =)
Быстрый ответ:

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