Как вставить элемент в начале ассоциативного массива в php

В настоящее время я пытаюсь сгруппировать свои данные по дате и имени. Вот мой код

    $data = [];
    foreach($allmatches as $d){
       $name = $d['div']['divisionName'];
       $data[$d['playingDate']][$name][]=$d;
       $data[$d['playingDate']]['day']=$d['day'];
       $data[$d['playingDate']]['month']=$d['month'];
       $data[$d['playingDate']]['isToday']=$d['isToday'];
    }
    return $data;

OUTPUT 
======
2018-09-18: {
  Elitserien: [+],
  day: "18",
  month: "Sep",
  isToday: true,
  Division 2: [+],
  Division 5: [+]
},

Текущий выход начинается с Elitserien но я хочу добиться Division 5 в начале..

Чтобы помочь в дальнейшем, вот изображение текущих данных

Я хочу вставить новый элемент всегда в начале массива. Как мне это сделать? Огромное спасибо.

3 ответа

Решение

Поскольку вы используете ассоциативный массив, вам нужно использовать array_merge предварять данные серии (т.е. данные, проиндексированные $name к началу $data[$d['playingDate']] массив. Этот код будет делать то, что вы хотите. Обратите внимание, что я поставил код серии в конце, чтобы избежать проверки $data[$d['playingDate']] устанавливается, а также $data[$d['playingDate']][$name],

$data = [];
foreach($allmatches as $d){
   $name = $d['div']['divisionName'];
   $data[$d['playingDate']]['day']=$d['day'];
   $data[$d['playingDate']]['month']=$d['month'];
   $data[$d['playingDate']]['isToday']=$d['isToday'];
   if (!isset($data[$d['playingDate']][$name])) $data[$d['playingDate']] = array_merge(array($name => array()), $data[$d['playingDate']]);
   $data[$d['playingDate']][$name][]=$d;
}

Я создал небольшое демо на 3v4l.org

Вы можете просто использовать + оператор:

$data = [];
foreach($allmatches as $d){

   $name = $d['div']['divisionName'];

   // Prepare a temp array
   $temp = array();
   $temp[$name][]   = $d;
   $temp['day']     = $d['day'];
   $temp['month']   = $d['month'];
   $temp['isToday'] = $d['isToday'];

   // Add to the beginning of $data array (first-level)
   $data = array($d['playingDate'] => $temp) + $data;
}
return $data;

array_unshift() Функция исправит вашу проблему.

Другие вопросы по тегам