将子数组推入同一个数组

Pushing a sub array into the same array

我想把一个数组的内容放到同一个数组中。这里我有一个数组 $mclass,其值如

Array
(
[0] => stdClass Object
    (
        [room_id] => 1,3,5
        [day] => 1
        [class_teacher] => TEA-2014-2
        [final_exam_date] => 2015-09-21
    )
)

您可以看到我的 room_id 索引的值为 1,3,5。现在,我想分解 room_id 并通过更改 room_id 获取相同数组索引数据的副本并推入数组。最后删除当前数组索引如[0]。这里我想要最终结果为。

Array
(
    [0] => stdClass Object
    (
        [room_id] => 1
        [day] => 1
        [class_teacher] => TEA-2014-2
        [final_exam_date] => 2015-09-21
    )
    [1] => stdClass Object
    (
        [room_id] => 3
        [day] => 1
        [class_teacher] => TEA-2014-2
        [final_exam_date] => 2015-09-21
    )
    [2] => stdClass Object
    (
        [room_id] => 5
        [day] => 1
        [class_teacher] => TEA-2014-2
        [final_exam_date] => 2015-09-21
    )
)

这是我的代码:

if(count($mclass)>0)
    {
        foreach($mclass as $mclasskey=>$mclass_row)
        {

            /* Room ID Calculation */
            if(isset($mclass[$mclasskey]))
            {
                $temp_room_id = explode(',',$mclass_row->room_id);
            
                if(count($temp_room_id)>1)
                {

                    foreach($temp_room_id as $trkey=>$tr)
                    {
                        if(!in_array($temp_room_id[$trkey], $morning_class_semester))
                        {
                            array_push($morning_class_semester,$temp_room_id[$trkey]);
                        }
                    }

                    if(count($morning_class_semester)>0)
                    {
                        foreach($morning_class_semester as $mcskey=>$mcs)
                        {
                            $index_count = count($new_test);
                            $test[$index_count] = $mclass[$mclasskey];
                            
                            $test[$index_count]->room_id = $morning_class_semester[$mcskey];
                            

                            array_push($new_test,$test[$index_count]);
                        }

                        unset($mclass[$mclasskey]);

                    }

                    
                }
            }

        }
    }

下面的代码仅使用数组就可以完成您要查找的内容。因此,您必须将数组访问运算符更改为 ->,因为您正在访问一个对象。我会这样做,但它会打破这个例子,所以我会把它留给你。

代码解释: 遍历数组选择每个子数组(在你的例子中是对象),在 $item('room_id') ... (在你的例子中是 $item->room_id )上爆炸......并通过循环从使用数据的子数组中创建子数组从原来使用每个键。删除原始项目(具有合并的 room_ids)并合并占位符和原始数组。

<?php
//Establish some data to work with
$array = array(
    array(
    "room_id" => "1,3,5",
    "day" => 1,
    "class_teacher" => "TEA-2014-2",
    "final_exam_date" => "2015-09-21",
));

foreach ($array as $key => $item) {
    $placeholder = array();
    $ids = explode(',',$item['room_id']);
    if (count($ids) > 1) {
        foreach ($ids as $id) {
            $push = array(
                'room_id' => $id,
                'day' => $item['day'],
                'class_teacher' => $item['class_teacher'],
                'final_exam_date' => $item['final_exam_date']
            );
            array_push($placeholder, $push);
        }
        $array = array_merge($array, $placeholder);
        unset($array[$key]);
    }
}

var_dump($array);
?>