Как вставить элемент в начале ассоциативного массива в 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;