如何在PHP中将数据从主数组传递到多个数组
我有一个带有子数组的数组,每个子数组都有“type”(int)和“datetime”。我需要循环trought数组,并以一种特殊的方式创建包含这些子数组组的新数组(或对象):每个“类型”都可以是[0-3]0表示开始日期,3表示结束日期(1和2之间用于其他目的)。具有这些子阵列的每个新阵列都应以0开始,以3结束 我不使用任何框架,只使用PHP5和jQuery。主数组来自一个循环,我是通过一个带有GROUP_CONCAT的SQL查询生成的。我刚刚将concat字段传递给一个主数组,但我需要重新组合子数组以创建某种类型的注册表 这是我用子数组得到的数组。它们已按日期时间排序,每个类型“0”表示“开始日期/开始新注册表”,“3”表示“结束日期/结束注册表” 我需要通过注册表创建一个包含子数组或对象的新数组,注册表是一个具有startdate(类型0)、介于someDate(类型1,2)和enddate(类型3)之间的元素。重要的是,下一个子阵列的startdate比旧的子阵列enddate更为最新。每个“tipo”+“fechahora”数组都有更多字段(签名、地址等),因此我需要将这些字段保留为子数组:如何在PHP中将数据从主数组传递到多个数组,php,arrays,function,merge,Php,Arrays,Function,Merge,我有一个带有子数组的数组,每个子数组都有“type”(int)和“datetime”。我需要循环trought数组,并以一种特殊的方式创建包含这些子数组组的新数组(或对象):每个“类型”都可以是[0-3]0表示开始日期,3表示结束日期(1和2之间用于其他目的)。具有这些子阵列的每个新阵列都应以0开始,以3结束 我不使用任何框架,只使用PHP5和jQuery。主数组来自一个循环,我是通过一个带有GROUP_CONCAT的SQL查询生成的。我刚刚将concat字段传递给一个主数组,但我需要重新组合子
$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表中,每个注册表排成一行
编辑:
我知道我必须使用循环,但我不知道如何“获取类型为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;
我不知道如何继续。这只是在每个原始数组值上循环,并在临时数组中创建一个条目(本例中为
$temp
),根据类型使用任何值。然后,当找到类型3时,将其添加到$newarray
$newarray = [];
$temp = [];
$count = 0;
foreach ( $array as $entry ) {
if ( $entry['tipo'] == 0 ) {
$temp = [ 'startdate' => $entry ];
}
else if ( $entry['tipo'] == 3 ) {
$temp["enddate"] = $entry;
$newarray["registry".$count++] = $temp;
}
else {
$temp["pauses"][] = $entry;
}
}
对于这种情况,一个简单的foreach后跟switch case即可
$result = [];
$i = 0;
$var = 3; // you can manage this at your will
foreach ($array as $key => $value) {
switch ($value['tipo']) { // passing tipo value here
case 0:
// it will capture for same record for current value of $i
$result['registry' . $i]['startdate'] = $value;
break;
case $var:
// detects last entry and will increment
$result['registry' . $i++]['enddate'] = $value;
break;
default:
// if not 0 and $var then push it in pauses
$result['registry' . $i]['pauses'][] = $value;
break;
}
}
.循环非常简单,您是否尝试过?但是使用
0
,1
等而不是registry0
,registry1
会更简单、更有意义
$result = [];
$i = 0;
$var = 3; // you can manage this at your will
foreach ($array as $key => $value) {
switch ($value['tipo']) { // passing tipo value here
case 0:
// it will capture for same record for current value of $i
$result['registry' . $i]['startdate'] = $value;
break;
case $var:
// detects last entry and will increment
$result['registry' . $i++]['enddate'] = $value;
break;
default:
// if not 0 and $var then push it in pauses
$result['registry' . $i]['pauses'][] = $value;
break;
}
}