我正在尝试将一个数组的内容放入同一个数组中。这里我有一个数组 $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);
?>
循环对象,循环通过分解逗号分隔字符串返回的值,克隆每个新需要的对象,覆盖
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);