Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите с массивом ...

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
vens
Отправлено: 30 Августа, 2014 - 01:01:13
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Здравствуйте, нужно из массива вытащить то что входит в диапазон дат:
Например имеется:
дата1 = 2014-08-22
дата2 = 2014-12-30

Сам масив:
PHP:
скопировать код в буфер обмена
  1.  
  2.     $inflation = array(
  3.                
  4.                 '103' => "2014-08-22",
  5.                 '101' => "2014-09-22",
  6.                 '102' => "2014-10-22",
  7.                 '104' => "2014-11-22",
  8.                 '107' => "2014-12-22",
  9.                 '104' => "2012-12-28"
  10. уже не входит в диапазон--     '107' => "2015-01-15",
  11.             );
  12.  

При этом сам день даты не важен, главное месяц.
Как такое реализовать? Может я вообще не в ту сторону копаю ... Не понял Поделитесь кто чем может, за ранее Спасибо! Закатив глазки

(Отредактировано автором: 30 Августа, 2014 - 01:03:13)

 
 Top
dcc0
Отправлено: 30 Августа, 2014 - 01:40:21
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Так?
PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3. $inflation = array(
  4.                '112' => "2011-01-15",
  5.                 '103' => "2014-08-22",
  6.                 '101' => "2014-09-22",
  7.                 '102' => "2014-10-22",
  8.                 '104' => "2014-11-22",
  9.                 '107' => "2014-12-22",
  10.                 '104' => "2012-12-28",
  11.                 '107' => "2015-01-15"
  12.                                 );
  13.  
  14. foreach($inflation as $value) {
  15. $l = strtr($value, '-', ' ');
  16.  $l=str_replace(" ","",$l);
  17. if($l<"20141231" && $l > "20110115") {
  18.  echo $l . "<br/>";
  19. }
  20.  }
  21.  ?>
  22.  
  23.  

(Отредактировано автором: 30 Августа, 2014 - 02:02:38)



-----
Март 2021. Бросил программирование
 
 Top
RickMan
Отправлено: 30 Августа, 2014 - 01:43:48
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




А не лучше ли использоваться strtotime() для перевода даты в unix и дальнейшего сравнения?
 
 Top
dcc0
Отправлено: 30 Августа, 2014 - 01:48:16
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




RickMan вероятно... да и замена у меня не изящная.
Вообще лучше регуляркой все символы кроме цифр исключить, вдруг даты по разному записаны.

(Отредактировано автором: 30 Августа, 2014 - 02:31:55)



-----
Март 2021. Бросил программирование
 
 Top
DelphinPRO
Отправлено: 30 Августа, 2014 - 07:19:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




dcc0 пишет:
RickMan вероятно... да и замена у меня не изящная.
Вообще лучше регуляркой все символы кроме цифр исключить, вдруг даты по разному записаны.


Вы говнокод написали, извините за прямоту. Если есть дата, нужно работать с ней как с датой, а не строкой. Для работы с датами в php есть специальные функции и классы. Нужно ими пользоваться.
Как вы думаете, для чего созданы разные типы данных, ведь, в принципе и одними строками можно обойтись?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
dcc0
Отправлено: 30 Августа, 2014 - 08:08:45
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




DelphinPRO Не извиню. Не люблю это выражение. Подчеркивает неумение общаться.

Напишите вариант, который считаете корректным.

(Отредактировано автором: 30 Августа, 2014 - 09:22:56)



-----
Март 2021. Бросил программирование
 
 Top
RickMan
Отправлено: 30 Августа, 2014 - 10:57:06
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




dcc0 пишет:
DelphinPRO Не извиню. Не люблю это выражение. Подчеркивает неумение общаться.

Напишите вариант, который считаете корректным.


Я же написал выше про strtotime() + советую познакомиться с этим вот http://www.php.net/manual/ru/class.datetime.php
 
 Top
vens
Отправлено: 30 Августа, 2014 - 11:11:10
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




dcc0 пишет:
Так?
PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3. $inflation = array(
  4.                '112' => "2011-01-15",
  5.                 '103' => "2014-08-22",
  6.                 '101' => "2014-09-22",
  7.                 '102' => "2014-10-22",
  8.                 '104' => "2014-11-22",
  9.                 '107' => "2014-12-22",
  10.                 '104' => "2012-12-28",
  11.                 '107' => "2015-01-15"
  12.                                 );
  13.  
  14. foreach($inflation as $value) {
  15. $l = strtr($value, '-', ' ');
  16.  $l=str_replace(" ","",$l);
  17. if($l<"20141231" && $l > "20110115") {
  18.  echo $l . "<br/>";
  19. }
  20.  }
  21.  ?>
  22.  
  23.  



Дата у меня позже и переводится в unix просто написал так для более точной наглядности. Дай человеку данные в массив в такой дате лучше будет писать.

По коду, кроме самих дат мне нужно получить и их значения. Т.е. эти 103, 104 и т.п.

(Отредактировано автором: 30 Августа, 2014 - 11:13:03)

 
 Top
dcc0
Отправлено: 30 Августа, 2014 - 11:21:29
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




RickMan, как-то так? Или еще по другому можно?


Да, код неверный получается...

(Отредактировано автором: 30 Августа, 2014 - 11:32:55)



-----
Март 2021. Бросил программирование
 
 Top
vens
Отправлено: 30 Августа, 2014 - 11:30:40
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




dcc0 пишет:
RickMan, как-то так? Или еще по другому можно?

Так, спасибо огромное)
 
 Top
dcc0
Отправлено: 30 Августа, 2014 - 11:38:33
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1. Так, спасибо огромное)

Погоди , вероятно, неверный код вообще


-----
Март 2021. Бросил программирование
 
 Top
vens
Отправлено: 30 Августа, 2014 - 11:44:15
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




dcc0 пишет:
PHP:
скопировать код в буфер обмена
  1. Так, спасибо огромное)

Погоди , вероятно, неверный код вообще


почему?
(Добавление)
Ну да с всего диапазона выводит только 3 варианта, а должно 7 выводить.
 
 Top
dcc0
Отправлено: 30 Августа, 2014 - 11:59:52
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Конечно, ключи-то совпадают, т.е. дубликатов в массиве как бы и нет.



PHP:
скопировать код в буфер обмена
  1. (
  2.     [112] => 2011-01-15
  3.     [103] => 2014-08-22
  4.     [101] => 2014-09-22
  5.     [102] => 2014-10-22
  6.     [104] => 2012-12-28
  7.     [107] => 2015-01-15
  8. )


Тогда код верный:

PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3. $inflation = array(
  4.                '112' => "2011-01-15",
  5.                 '103' => "2014-08-22",
  6.                 '101' => "2014-09-22",
  7.                 '102' => "2014-10-22",
  8.                 '104' => "2014-11-22",
  9.                 '107' => "2014-12-22",
  10.                 '108' => "2015-01-15"
  11.                                 );
  12.  
  13. foreach($inflation as $k =>  $value) {
  14. $l = date("Ymd",(strtotime($value)));
  15. if($l< "20141231" && $l > "20140801") {
  16.  echo  $k . '=' . $value . '<br/>';
  17.  
  18. }
  19.  }
  20.  
  21.  
  22.  ?>
  23.  

(Отредактировано автором: 30 Августа, 2014 - 12:40:27)



-----
Март 2021. Бросил программирование
 
 Top
vens
Отправлено: 30 Августа, 2014 - 12:01:16
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




dcc0 пишет:
Конечно, ключи-то совпадают.



PHP:
скопировать код в буфер обмена
  1. (
  2.     [112] => 2011-01-15
  3.     [103] => 2014-08-22
  4.     [101] => 2014-09-22
  5.     [102] => 2014-10-22
  6.     [104] => 2012-12-28
  7.     [107] => 2015-01-15
  8. )


Так они у будут совпадать ...((( Это курсы инфляции они могут повторятся ....
(Добавление)
Спасибо всем, проблему решил самостоятельно Язычок Улыбка
 
 Top
dcc0
Отправлено: 30 Августа, 2014 - 12:39:44
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Я бы посоветовал заглянуть в эту тему:
http://forum.php.su/topic.php?fo...1&topic=4900


-----
Март 2021. Бросил программирование
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB