У меня есть массив с подмассивами, у каждого подмассива есть 'type' (int) и 'datetime'. Мне нужно циклически обработать массив и создать новые массивы (или объекты) с группами этих подмассивов особым образом: каждый тип может быть [0-3] 0 означает начальную дату и 3 означает конечную дату (1 и 2 находятся между для других целей). Каждый новый массив с этими подмассивами должен начинаться с 0 и заканчиваться на 3.
Я не использую фреймворк, только PHP5 и jQuery. Основной массив происходит из цикла, который я сделал из SQL-запроса с GROUP_CONCAT. Я только что передал поля concat в основной массив, но мне нужно перегруппировать подмассивы для создания некоторых типов реестров.
Вот массив, который я получил с подмассивами. Они уже отсортированы по дате и времени, каждый тип «0» означает «дата начала / начало нового реестра», а «3» означает «дата окончания / конец реестра».
$array = [
["tipo"=>0,"fechahora"=>"2019-05-26 09:35:30"],
["tipo"=>1,"fechahora"=>"2019-05-26 10:30:15"],
["tipo"=>2,"fechahora"=>"2019-05-26 10:43:12"],
["tipo"=>3,"fechahora"=>"2019-05-26 14:30:26"],
["tipo"=>0,"fechahora"=>"2019-05-26 15:35:22"],
["tipo"=>3,"fechahora"=>"2019-05-26 16:35:31"],
["tipo"=>0,"fechahora"=>"2019-05-27 08:31:57"],
["tipo"=>1,"fechahora"=>"2019-05-27 10:27:22"],
["tipo"=>2,"fechahora"=>"2019-05-27 10:38:31"],
["tipo"=>3,"fechahora"=>"2019-05-27 14:20:38"],
["tipo"=>0,"fechahora"=>"2019-05-28 09:39:42"],
["tipo"=>1,"fechahora"=>"2019-05-28 11:43:08"],
["tipo"=>2,"fechahora"=>"2019-05-28 11:53:19"],
["tipo"=>3,"fechahora"=>"2019-05-28 14:43:31"],
["tipo"=>0,"fechahora"=>"2019-05-29 10:30:22"],
["tipo"=>3,"fechahora"=>"2019-05-29 14:38:46"]
];
Мне нужно создать новый массив с подмассивами или объектами по реестру, реестр - это элемент, у которого есть начальная дата (тип 0), некоторые промежуточные (тип 1,2) и конечная дата (тип 3). Это важно. У следующего подмассива начальная дата имеет больший ток, чем у старого подмассива. Каждый массив "tipo" + "fechahora" имеет больше полей (подпись, адрес и т. Д.), Поэтому мне нужно сохранить их как подмассивы:
$newarray = [
'registry0' => [
"startdate"=> ["tipo"=>0,"fechahora"=>"2019-05-26 09:35:30"],
"pauses"=> [
["tipo"=>1,"fechahora"=>"2019-05-26 10:30:15"],
["tipo"=>2,"fechahora"=>"2019-05-26 10:43:12"]
],
"enddate" => ["tipo"=>3,"fechahora"=>"2019-05-26 14:30:26"]
],
'registry1' => [
"startdate"=> ["tipo"=>0,"fechahora"=>"2019-05-26 15:35:22"],
"pauses"=> [],
"enddate" => ["tipo"=>3,"fechahora"=>"2019-05-26 16:35:31"]
],
'registry2' => [
"startdate"=> ["tipo"=>0,"fechahora"=>"2019-05-27 08:31:57"],
"pauses"=> [
["tipo"=>1,"fechahora"=>"2019-05-27 10:27:22"],
["tipo"=>2,"fechahora"=>"2019-05-27 10:38:31"]
],
"enddate" => ["tipo"=>3,"fechahora"=>"2019-05-27 14:20:38"]
]
];
Я мог бы использовать массивы или объекты, я не знаю, как создать цикл для перегруппировки таких массивов (начиная с одного значения поля и заканчивая другим и т. Д.). Я даже не знаю, есть ли более простой способ. Любая помощь будет оценена.
Если это могло бы помочь: мне нужно, чтобы таким способом регистры помещались в таблицу HTML, каждый реестр подряд.
EDIT:
Я знаю, что мне нужно использовать цикл, но я не знаю, как "получить первый элемент с типом 0, создать массив, включить элемент, включить все остальные элементы до типа 3, закрыть массив, создать новый массив и так далее ... . "
В каком-то коде:
$newarray = [];
foreach($array as $element) {
if ($element["tipo"]==0) {
//new subarray
//include this in subarray
}
// include all "tipos" 1,2 in subarray
if ($element["tipo"]==3) {
//include this in subarray
//finish subarray
}
//incude subarray in $newarray
}
return $newarray;
Я не знаю, как продолжить.