Как вставить элемент в начале ассоциативного массива в PHP - PullRequest
0 голосов
/ 28 октября 2018

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

    $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 в начале.

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

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

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

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

0 голосов
/ 29 октября 2018

Поскольку вы используете ассоциативный массив, вам нужно использовать 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

0 голосов
/ 28 октября 2018

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

$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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...