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
Форумы портала PHP.SU :: Версия для печати :: Помогите с массивом ...
Форумы портала PHP.SU » » Вопросы новичков » Помогите с массивом ...

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

1. vens - 30 Августа, 2014 - 01:01:13 - перейти к сообщению
Здравствуйте, нужно из массива вытащить то что входит в диапазон дат:
Например имеется:
дата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.  

При этом сам день даты не важен, главное месяц.
Как такое реализовать? Может я вообще не в ту сторону копаю ... Не понял Поделитесь кто чем может, за ранее Спасибо! Закатив глазки
2. dcc0 - 30 Августа, 2014 - 01:40:21 - перейти к сообщению
Так?
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.  
3. RickMan - 30 Августа, 2014 - 01:43:48 - перейти к сообщению
А не лучше ли использоваться strtotime() для перевода даты в unix и дальнейшего сравнения?
4. dcc0 - 30 Августа, 2014 - 01:48:16 - перейти к сообщению
RickMan вероятно... да и замена у меня не изящная.
Вообще лучше регуляркой все символы кроме цифр исключить, вдруг даты по разному записаны.
5. DelphinPRO - 30 Августа, 2014 - 07:19:16 - перейти к сообщению
dcc0 пишет:
RickMan вероятно... да и замена у меня не изящная.
Вообще лучше регуляркой все символы кроме цифр исключить, вдруг даты по разному записаны.


Вы говнокод написали, извините за прямоту. Если есть дата, нужно работать с ней как с датой, а не строкой. Для работы с датами в php есть специальные функции и классы. Нужно ими пользоваться.
Как вы думаете, для чего созданы разные типы данных, ведь, в принципе и одними строками можно обойтись?
6. dcc0 - 30 Августа, 2014 - 08:08:45 - перейти к сообщению
DelphinPRO Не извиню. Не люблю это выражение. Подчеркивает неумение общаться.

Напишите вариант, который считаете корректным.
7. RickMan - 30 Августа, 2014 - 10:57:06 - перейти к сообщению
dcc0 пишет:
DelphinPRO Не извиню. Не люблю это выражение. Подчеркивает неумение общаться.

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


Я же написал выше про strtotime() + советую познакомиться с этим вот http://www.php.net/manual/ru/class.datetime.php
8. vens - 30 Августа, 2014 - 11:11:10 - перейти к сообщению
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 и т.п.
9. dcc0 - 30 Августа, 2014 - 11:21:29 - перейти к сообщению
RickMan, как-то так? Или еще по другому можно?


Да, код неверный получается...
10. vens - 30 Августа, 2014 - 11:30:40 - перейти к сообщению
dcc0 пишет:
RickMan, как-то так? Или еще по другому можно?

Так, спасибо огромное)
11. dcc0 - 30 Августа, 2014 - 11:38:33 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. Так, спасибо огромное)

Погоди , вероятно, неверный код вообще
12. vens - 30 Августа, 2014 - 11:44:15 - перейти к сообщению
dcc0 пишет:
PHP:
скопировать код в буфер обмена
  1. Так, спасибо огромное)

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


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



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.  
14. vens - 30 Августа, 2014 - 12:01:16 - перейти к сообщению
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. )


Так они у будут совпадать ...((( Это курсы инфляции они могут повторятся ....
(Добавление)
Спасибо всем, проблему решил самостоятельно Язычок Улыбка
15. dcc0 - 30 Августа, 2014 - 12:39:44 - перейти к сообщению
Я бы посоветовал заглянуть в эту тему:
http://forum.php.su/topic.php?fo...1&topic=4900

 

Powered by ExBB FM 1.0 RC1