Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод в зависимости от даты 
:(
    Опции темы
Sice
Дата 29.2.2012, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Радио Онлайн
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.12.2007

Репутация: 0
Всего: 0



В общем имеется 6 массивов с данными. Примерно такого вида:
Код

$campany1 = array('name' => "Название кампании",
                  'start_day' => "Monday",
                  'start_time_1_hour' => "11",
                  'start_time_1_min' => "30",
                  'start_time_2_hour' => "23",
                  'start_time_2_min' => "00",
                   'duration' => "30 мин", // Длительность
                  'location' => "Деревня",
                  'prize' => "Знак Отличия",
                  'remains' => "" //Осталось до начала
);
 

Мне нужно в зависимости от дня недели и времени выводить именно ближайшую запись, по времени.
Вот думаю как это правильно сделать ? Вариант с:
Код

$date = getdate();

if($date['weekday']==Monday){
foreach($campnay1 as $value => $k){
echo "<b>$value</b><br>";
}
}
 

кажется мне странным и не правильным. Еще же нужно сверять и время, потому что есть несколько вариантов, которые должны выводиться в понедельник, но в разное время.

Подскажите пожалуйста, как правильно организовать вывод данных из массива в зависимости от дня недели и времени.
Заранее спасибо.
PM MAIL WWW   Вверх
Task
Дата 29.2.2012, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.2.2012

Репутация: нет
Всего: нет



И данные массивы служат исключительно для этой цели - выбор необходимого по времени?
PM MAIL   Вверх
Sice
Дата 29.2.2012, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Радио Онлайн
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.12.2007

Репутация: 0
Всего: 0



Цитата(Task @ 29.2.2012,  16:07)
И данные массивы служат исключительно для этой цели - выбор необходимого по времени?

Ну в принципе да smile или это не совсем правильно/удобно делать ?
БД не хочется задействовать просто smile
PM MAIL WWW   Вверх
Task
Дата 29.2.2012, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.2.2012

Репутация: нет
Всего: нет



Ну тогда удобнее эти массивы держать в одном массиве, а ключами их сделать время в timestamp, тогда с помощью array_intersect_key и strtotime будете получать нужный (нужные массивы), при этом совсем не обязательно держать в них ключи  'start_day', 'start_time_1_hour' и   'start_time_1_min', ключ массива это содержать будет.
Если не удобно так, можете сделать ключом и строковое значение.

PS. А по какой причине недобна БД? Она бы, кстати, выдала вам как раз необходимое.

Это сообщение отредактировал(а) Task - 29.2.2012, 16:28
PM MAIL   Вверх
baldina
Дата 29.2.2012, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



нужна другая структура данных: что бы элементы данных индексировались по дню недели и были отсортированы по времени, например 
Код

function create_work_item ($data) {
  for ($i=1; $data["start_time_${i}_hour"]!==null; ++$i) {
    $time = $data["start_time_${i}_hour"].$data["start_time_${i}_min"];
    $new_data[$time]=$data;
  }
  ksort($new_data);
  return array($data['start_day'], $new_data);
}

list ($key, $value) = create_work_item ($campany1);
$items[$key] = $value;
list ($key, $value) = create_work_item ($campany2);
$items[$key] = $value;
list ($key, $value) = create_work_item ($campany3);
$items[$key] = $value;
...
list ($key, $value) = create_work_item ($campanyN);
$items[$key] = $value;


тогда получить ближайший по времени элемент просто:
Код

$date = getdate();
$current_time = $date['hours'] . $date['minutes'];
$today_items = $items[$date['weekday']];
for_each ($today_items as $time=>$item) {
  if ($time > $current_time)
    return $item;
}


Добавлено через 1 минуту и 40 секунд
Цитата(Sice @  29.2.2012,  16:15 Найти цитируемый пост)
Ну в принципе да

раз так, то структуру сразу можно в нужном виде хранить
PM MAIL   Вверх
Sice
Дата 29.2.2012, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Радио Онлайн
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.12.2007

Репутация: 0
Всего: 0



Спасибо Вам большое!
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0757 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.