• Как сгруппировать массив по его значениям?

    kimono
    @kimono
    Web developer
    $week = [
      'Понедельник' => [0 => '9:00', 1 => '19:00'],
      'Вторник'     => [0 => '9:00', 1 => '19:00'],
      'Среда'       => [0 => '9:00', 1 => '19:00'],
      'Четверг'     => [0 => '10:00', 1 => '14:00'],
      'Пятница'     => [0 => '9:00', 1 => '19:00'],
      'Суббота'     => [0 => '9:00', 1 => '19:00'],
      'Воскресенье' => [0 => '10:00', 1 => '16:00']
    ];
    
    $data = [];
    $current = '';
    $i = 0;
    
    foreach ($week as $day => $schedule) {
      if ($current !== $schedule) {
        $current    = $schedule;
        $data[$i++] = ['start' => $day, 'end' => $day, 'time' => implode(' - ', $schedule)];
      }
      $data[$i - 1]['end'] = $day;
    }
    foreach ($data as $id => $row) {
      $data[$id] = [implode(' - ', array_unique([$row['start'], $row['end']])) => $row['time']];
    }
    var_dump($data);

    на выходе:
    'Понедельник - Среда' => '9:00 - 19:00'
    'Четверг' => '10:00 - 14:00'
    'Пятница - Суббота' => '9:00 - 19:00'
    'Воскресенье' =>  '10:00 - 16:00'
    Ответ написан
    Комментировать
  • Как сгруппировать массив по его значениям?

    1. Создаете выходной массив.
    2. Определяетесь с тем, что будет ключом в нем. Это может быть, например, особым образом сформированная строка из элементов очередного элемента входного массива (например, «9:00 — 19:00») или сериализованный очередной элемент.
    3. Пробегаете в цикле по входному. Каждый очередной элемент входного состоит из ключа (день недели) и значения (массив с двумя значениями времени). Так вот, из значения элемента входного массива формируйте ключ выходного (как описано в п.2).
    4. В элемент выходного массива по сформированному ключу добавляете ключ элемента входного.

    То есть выходной массив будет примерно такой:
    Array (
    [9:00 — 19:00] => Array ( [0] => Понедельник [1] => Вторник … )
    [10:00 — 16:00] => Array ( [0] => Воскресенье ) )


    А дальше уже, исходя из требований, формировать выходные строки с перечислениями дней или с формированием диапазонов.
    Ответ написан
    Комментировать
  • Почему не срабатывает success в ajax запросе?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    По какой-такой причине стало модным не писать error?
    Спрашиваю каждого, кто не пишет обработчик ошибок — вы уверены, что в мире царит порядок и справедливость, гармония заразила IT и избавила мир от таких понятий, как валидность, ответ 4хх и 5хх и прочих нудных и никому не нужных вещей?
    Ответ написан
    20 комментариев