我是php新手,现在只写了3天......
我正在为大学生创建一个调度应用程序,其中一个数据库表包含从两个不同表中获得的2个主键。 (Student_ID
,Slot_ID
)
我创建了2个数组。一个数组包含所有学生ID,另一个数组包含所有Slot ID
现在我想循环遍历所有学生ID并从其他数组中为其分配一个插槽,然后将这两个值插入到名为Student_Slot
的第三个表中,该表保存(Student_ID
,{ {1}})。
我尝试了如下所示的Slot_ID
方法,并使用了元素最少的数组。
Array_Combine
这会抛出2个错误:
注意:数组转换为字符串
如果有人知道在PHP中构建它的更好方法,或者围绕我想要实现的解决方案,这将是很好的。
另外:我知道错误正在发生,因为数组内部保存数组而不是String或INT数据但是我找不到解决方法。
更新:
阵列结构是;
$min = min(count($PartTimeStudents), count($EveningTimeSlots));
$result = array_combine(array_slice($PartTimeStudents, 0, $min), array_slice($EveningTimeSlots, 0, $min));
print_r($result);
数组的内容是
// Part Time Students
$sql = "SELECT Student_ID FROM student WHERE PartTime =1";
$result = mysqli_query($con, $sql);
$PartTimeStudents = array();
if(mysqli_num_rows($result) > 0){
while($row = mysqli_fetch_assoc($result)){
$PartTimeStudents [] = $row;
}
}
// EveningTimeSlots
$sql = "SELECT * FROM slot WHERE StartTime >= '18:00:00'";
$result = mysqli_query($con, $sql);
$EveningTimeSlots = array();
if(mysqli_num_rows($result) > 0){
while($row = mysqli_fetch_assoc($result)){
$EveningTimeSlots [] = $row;
}
}
我想配对[Student_ID] + [Slot_ID]并将它们插入表中,只要阵列中的每个学生都获得一个插槽,将哪个插槽分配给哪个学生并不重要。希望能搞清楚。
固定
完美无缺!正是我想要实现的!谢谢您的帮助。
我的新代码如下:
PartTimeStudents:
Array(
[0] => Array ( [Student_ID] => 1235 )
[1] => Array ( [Student_ID] => 65432789 )
[2] => Array ( [Student_ID] => 123456789 )
[3] => Array ( [Student_ID] => 987654321 )
)
EveningTimeSlot:
Array (
[0] => Array ( [Slot_ID] => 3 [Day] => Monday [Date] => 2018-05-28 [StartTime] => 19:00:00 [EndTime] => 20:00:00 [Room_ID] => 1 )
[1] => Array ( [Slot_ID] => 4 [Day] => Tuesday [Date] => 2018-05-28 [StartTime] => 20:00:00 [EndTime] => 21:00:00 [Room_ID] => 1 )
)
答案 0 :(得分:0)
您必须从其数组中提取每个id以创建简单数组,然后您可以使用数组array_combine 你可以像这样使用array_map函数
首先创建要应用于数组
中每条记录的函数$students = array_map("extractStudentId",$PartTimeStudents);//new students array
$slots =array_map("extractSlotId",$EveningTimeSlots);//new slots array
然后使用array_map创建新数组
$min = min(count($students), count($slots));
$result = array_combine(array_slice($students, 0, $min), array_slice($slots, 0, $min));
然后您可以使用array_combine创建包含student_id和slot_id的新数组,就像您已经完成但使用新数组
foreach($result as $key=>$value){
}
你可以使用foreach循环来插入像这样的新数据
{{1}}
最后看看array_map文档以便更好地理解 http://php.net/manual/en/function.array-map.php