PHP组合多个对象数组并更改数组结构

PHP组合多个对象数组并更改数组结构,php,arrays,Php,Arrays,我有多个单独的对象数组,这些对象是从MySQL导入的(JSON编码),需要合并和更改结构。我基本上需要组合的[time]和[day]条目成为[cycle]的数组,这样我就可以循环它们。当前导入/解码后,每个MySQL查询的对象数组结构如下所示: name day cycle 1 cycle 2 cycle .. Running 1 60 55 .. Running 5

我有多个单独的对象数组,这些对象是从MySQL导入的(JSON编码),需要合并和更改结构。我基本上需要组合的[time]和[day]条目成为[cycle]的数组,这样我就可以循环它们。当前导入/解码后,每个MySQL查询的对象数组结构如下所示:

 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将无法工作