За последние 24 часа нас посетили 34380 программистов и 1819 роботов. Сейчас ищут 867 программистов ...

Отфильтровать дату из массива

Тема в разделе "PHP для новичков", создана пользователем wet, 29 июн 2016.

Метки:
  1. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    А мне вникать в суть проблемы лень если чуваку самому лень подумать. Поэтому я хочу чтобы он подумал, и правильно всё сделал. Я просто вообще не приминял пока ещё тех функций которые ты написал, я их знаю но не применял, если бы я решал данную задачу я бы вообще изначально подругому всё сделал, у меня бы даже такого массива не было, он бы имел другой вид. Я выше писал какого вида должен быть массив.
     
  2. wet

    wet Новичок

    С нами с:
    29 июн 2016
    Сообщения:
    14
    Симпатии:
    0
    Полностью скопипастил твой код, но выводит пустой массив
    PHP:
    1. )
     
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @wet, покажи как ты это сделал.
     
  4. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    А ты какой массив подставляешь к его коду вот этот
    PHP:
    1.  array (
    2.  
    3.    '2016-06-21 20:00:00' => 5,
    4.     '2016-06-21 19:00:00' => 10,
    5.    '2016-06-21 16:00:00' => 1000,
    6.     '2016-06-21 13:00:00' => 7,
    7.      '2016-06-21 12:00:00' => 3,
    8.      '2016-06-20 17:00:00' => 81,
    9.     '2016-06-20 16:00:00' => 1,
    10. )
    или вот этот
    PHP:
    1.  
    2.  
    3. $finalArr = array (
    4.  1044 =>
    5.   'workTime' =>
    6.   array (
    7.     '2016-06-21 20:00:00' => 5,
    8.    '2016-06-21 19:00:00' => 10,
    9.    '2016-06-21 16:00:00' => 1000,
    10.    '2016-06-21 13:00:00' => 7,
    11.     '2016-06-21 12:00:00' => 3,
    12.      '2016-06-20 17:00:00' => 81,
    13.    '2016-06-20 16:00:00' => 1,
    14.    )
    15.  )
    16. );
     
  5. wet

    wet Новичок

    С нами с:
    29 июн 2016
    Сообщения:
    14
    Симпатии:
    0
    --- Добавлено ---
    PHP:
    1. //исходные данные
    2. $arr = array(
    3.   '2016-06-21 20:00:00' => 5,
    4.   '2016-06-21 19:00:00' => 10,
    5.   '2016-06-21 16:00:00' => 1000,
    6.   '2016-06-21 13:00:00' => 7,
    7.   '2016-06-21 12:00:00' => 3,
    8.   '2016-06-20 17:00:00' => 81,
    9.   '2016-06-20 16:00:00' => 1,
    10. );
    11. $newArr = array(); //будут храниться новые данные
    12. foreach ($arr as $key => $val) {
    13.   $first = new DateTime($key);
    14.   next($arr);
    15.   list($key1, $val1) = each($arr);
    16.   prev($arr);
    17.   $second = new DateTime($key1);
    18.   $difference = $first->diff($second);
    19.   if ($difference->format('%h') < 2) {
    20.   $word = strstr($key, ' ', TRUE);
    21.   if (isset($newArr[$word])) {
    22.   $newArr[$word] = $newArr[$word] + $val + $val1;
    23.   } else {
    24.   $newArr[$word] = $val + $val1;
    25.   }
    26.   }
    27. }
     
    #30 wet, 29 июн 2016
    Последнее редактирование модератором: 29 июн 2016
  6. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    я тебе написал у тебя изначально массив не верный. Я написал какого вида массив для этого нужно иметь чтобы лишних функций избежать.
     
  7. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @askanim, изобретай велосипеды, это здорово тренерует мозг.
    --- Добавлено ---
    @wet, и как ты вставил это дело в свой код?
     
  8. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @mahmuzar я и изобретаю, но часто юзаю изобретёное.
    --- Добавлено ---
    @mahmuzar чем тебе не нравится подход в меньше кода ?)
    --- Добавлено ---
    @mahmuzar у меня тоже что и у него. по его коду.
     
  9. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @askanim, пляшем от исходных данных. А менять ему систему или нет это уже дело десятое и не решается тут в переписке.
    --- Добавлено ---
    @askanim, ошибки есть какие?
     
  10. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @mahmuzar неа. ошибок нет, ща погляжу. почему.
     
  11. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @askanim, покажи как ты првоеряешь.
    --- Добавлено ---
    У меня все работает.
     
  12. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    PHP:
    1. echo $difference->format('%h').'<br>';
    Покажите что у вас там выводит вот так?
    --- Добавлено ---
    Я лично вижу вот такие числа.
    6
    4
    20
    20
    19
    20

    Поэтому в условие и не входит
     
  13. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    выводит разницу в часах
    --- Добавлено ---
    Версия php какая?
    --- Добавлено ---
    должен выводить
    Код (Text):
    1. 1
    2. 3
    3. 3
    4. 1
    5. 19
    6. 1
    7. 10
     
  14. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    нет я бред написал. Не знаю почему не работает. У тебя сколько время?
     
  15. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Ты только что код копипастил, так ты пол кода срезал
    --- Добавлено ---
    время по москве 5:45
     
  16. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    нет так как я срезал работает, но не правильно, а так как ты кинул работает, но тоже не так как то. Я просто не понимаю значения всех этих функций
    PHP:
    1. next($arr);
    2. list($key1, $val1) = each($arr);
    3. prev($arr);
    4. \DateTime($key1);
    5. ->diff
    Я так в скольз почитал, но калупаться не хочу особо, могу направить, но меня не услышали, сам работаю сижу.
    --- Добавлено ---
    а у меня 12 48 (Владивосток. ) Там случайно функции не от текущего времени ли работают ? Хотя а разница какая должна быть могу тебе по тимке показать что у меня не работает. Но позже.
     
  17. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Версия пыха какая? Проверю у себя на твоей версии.
     
  18. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    5.6
     
  19. wet

    wet Новичок

    С нами с:
    29 июн 2016
    Сообщения:
    14
    Симпатии:
    0
    Задача решена, спасибо самому себе)
     
  20. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    В общем да, валится на 5.6 я делал на 7.0.3

    Даты на 5.6 почему -то обрабатываются иначе.
     
  21. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Получилось, что в 5.6 функция next была лишняя, в 7.0.3 без нее результат не тот был.

    В итоге получается, даты обрабатывается норм, но работа foreach другая:

    Код (Text):
    1.  
    2. //7.0.3
    3. var_dump(current($arr)); // int(5)
    4.  
    5. //5.6
    6. var_dump(current($arr)); // int(10)
    Разное поведение, как такое может быть?
    Это первая итерация.

    В 7 указатель не перемещается.
     
    #46 mahmuzar, 29 июн 2016
    Последнее редактирование: 29 июн 2016
  22. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    В php 5.4, 5.3 такое же поведение как и в 5.6

    Получается баг?
     
  23. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Не чего сказать не могу с функциями дат особо не работал ещё, сейчас другие аспекты изучаю.
    --- Добавлено ---
    чувак там чёто сделал и у него заработало, тока я уверен его проблему можно было решить 5тью строчками, а не тем кол-вом который он написал, даже меньше. Вот не понимаю людей которые делают, " ах лиж бы заработало и насрать".
    --- Добавлено ---
    Вот правильно сам себя не похвалишь ни кто не похвалит.
     
  24. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    читаешь через строчку? :)
    --- Добавлено ---
    заработало - ну и ладно. ) Главное чтобы не вернулся со словами: -"Оказывается то се".
     
  25. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Я просто читал про эти функции, но например не понимаю зачем перемещать указатель итерации, не ну возможно встречаются такие задачи, да наверное не доработка, либо отказались от функции, мб в 7-ой что-то другое юзается?

    Там же много что изменили...