将子数组压入同一个数组

问题描述 投票:0回答:2

我正在尝试将一个数组的内容放入同一个数组中。这里我有一个数组 $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]);

                    }

                    
                }
            }

        }
    }
php arrays codeigniter array-push
2个回答
0
投票

下面的代码仅使用数组即可完成您正在寻找的操作。因此,由于您正在访问对象,因此您必须将数组访问运算符更改为

->
。我会这样做,但这会破坏这个例子,所以我把它留给你。

代码解释: 循环遍历数组,选择每个子数组(在您的情况下为对象),在

$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);
?>

0
投票

循环对象,循环通过分解逗号分隔字符串返回的值,克隆每个新需要的对象,覆盖

room_id
,将新对象推入结果数组。

代码:(演示

$array = [
    (object) [
        'room_id' => '1,3,5',
        'day' => 1,
        'class_teacher' => 'TEA-2014-2',
        'final_exam_date' => '2015-09-21',
    ]
];

$result = [];
foreach ($array as $obj) {
    foreach (explode(',', $obj->room_id) as $id) {
        $new = clone $obj;
        $new->room_id = $id;
        $result[] = $new;
    }
}
var_export($result);
© www.soinside.com 2019 - 2024. All rights reserved.