PHP组合多个对象数组并更改数组结构
我有多个单独的对象数组,这些对象是从MySQL导入的(JSON编码),需要合并和更改结构。我基本上需要组合的[time]和[day]条目成为[cycle]的数组,这样我就可以循环它们。当前导入/解码后,每个MySQL查询的对象数组结构如下所示:PHP组合多个对象数组并更改数组结构,php,arrays,Php,Arrays,我有多个单独的对象数组,这些对象是从MySQL导入的(JSON编码),需要合并和更改结构。我基本上需要组合的[time]和[day]条目成为[cycle]的数组,这样我就可以循环它们。当前导入/解码后,每个MySQL查询的对象数组结构如下所示: name day cycle 1 cycle 2 cycle .. Running 1 60 55 .. Running 5
name day cycle 1 cycle 2 cycle ..
Running 1 60 55 ..
Running 5 30 15 ..
..
$newArray[] = array( "name" => $this->name, "day" => $this->day,
array("cycle" => $this->cycle, array("time" => $this->time, "cycle" =>
$this->cycle, "day" => $this->day)));
(查询1)
(查询2)
需要的结构是:
stdClass Object
(
[day] => 1
[name] => Running
[cycle] => Array
(
[0] => stdClass Object
(
[time] => 60
[cycle] => 1
[day] => 1
)
[1] => stdClass Object
(
[time] => 55
[cycle] => 2
[day] => 1
)
)
[id] => 36848901
)
stdClass Object
(
[day] => 5
[name] => Running
[cycle] => Array
(
[0] => stdClass Object
(
[time] => 30
[cycle] => 1
[day] => 5
)
[1] => stdClass Object
(
[time] => 15
[cycle] => 2
[day] => 5
)
)
[id] => 1237465
)
我需要程序使用foreach[day]和[cycle]对数组进行迭代,以生成如下内容:
name day cycle 1 cycle 2 cycle ..
Running 1 60 55 ..
Running 5 30 15 ..
..
$newArray[] = array( "name" => $this->name, "day" => $this->day,
array("cycle" => $this->cycle, array("time" => $this->time, "cycle" =>
$this->cycle, "day" => $this->day)));
它只能逐行进行。我对这个过程的这一部分没有(太多)控制权
我尝试过使用foreach循环和数组命令更改结构,如下所示:
name day cycle 1 cycle 2 cycle ..
Running 1 60 55 ..
Running 5 30 15 ..
..
$newArray[] = array( "name" => $this->name, "day" => $this->day,
array("cycle" => $this->cycle, array("time" => $this->time, "cycle" =>
$this->cycle, "day" => $this->day)));
这给了我一个结构,几乎是正确的,每个条目,但不是所有的组合。
为了将它们结合起来,我尝试了array\u merge\u recursive()和各种变体,但没有成功
因此,我认为我需要的是合并对象数组,然后更改结构,使每个[time]和[day]的值嵌套在[cycle]中,以便我可以循环它们
最好的方法是什么
它在PHP7.2上运行
更多我尝试的代码:
// get {data} part of JSON-encoded field for each mysql result
for ($x = 0; $x < $this->cycleCount; $x++) {
preg_match("/{.*}/",$this->tmpString[$x]['data'],$matches);
$this->data[$x] = json_decode($matches[0]);
foreach ($this->data[$x] as $day) {
$newArray[] = array( "name" => $day->name, "day" => $day->day,
array("cycle" => $day->cycle,
array("time" => $day->time,
"cycle" => $day->cycle,
"day" => $day->day)
)
);
}
//为每个mysql结果获取JSON编码字段的{data}部分
对于($x=0;$x<$this->cycleCount;$x++){
preg_match(“/{.*}/”,$this->tmpString[$x]['data'],$matches);
$this->data[$x]=json_decode($matches[0]);
foreach($this->data[$x]作为$day){
$newArray[]=array(“name”=>$day->name,“day”=>$day->day,
数组(“周期”=>$day->cycle,
数组(“时间”=>$day->time,
“周期”=>$day->cycle,
“日”=>$day->day)
)
);
}
如果您发布了更多尝试的代码,我们可能会建议一个快速解决方案。是否有可能修改查询以按您需要的顺序获取您需要的数据?@Nic3500不幸的是,JSON编码字段中有多个[day]&[name]数据,只有一个[cycle]在同一个字段中。每个新周期都是一个单独的结果row@Nic3500这不仅是数据顺序的问题,也是将数据与其他查询相结合以获得所需数组的问题。感谢建议的解决方案。目前的解决方案对我不起作用:它永远不会进入foreach($info['cycle']As$cycleeinfo)循环。当foreach循环行被删除,并且只剩下$data[$info]['id']]]部分时,我得到一个空结构。在对象数组中,在我的原始代码循环中生成的结构是一个字符串:[cycle]=>1,这意味着在建议的解决方案中,$info['cycle']也是字符串,因此foreach将无法工作