我对array_combine()函数有一个奇怪的问题。实际上,我有两个长度相同的数组($ skills和$ skills_level),第一个数组包含html表单中的选中复选框,第二个数组包含关联的选项。我想同时对其进行迭代,并将其元素插入数据库表:
foreach(array_combine($skills, $skills_level) as $skill => $skill_level) {
$insert_skills = "INSERT INTO worker_skills(worker_username, skill, level) VALUES('$worker_username', '$skill', '$skill_level')";
$query1 = mysqli_query($conn, $insert_skills);
除了一个特定的值(表格的第一个复选框)以外,其他所有内容都很好。我非常确定它会进入$ skills数组(我对其进行了测试),但是由于某种原因,它没有插入表行中,也不是它与数组$ skills_level相关的值。我尝试了其他方法(分别获取数组键,使用for循环等),但问题仍然存在。有人可以帮我吗?
答案 0 :(得分:2)
您可能有两个名字相同的技能。由于不能有两个相等的数组键,因此您将得到一个缩短的数组。
$skills = [ 'a', 'b', 'a' ];
$levels = [ 1, 2, 3 ];
var_dump(array_combine($skills, $levels));
array(2) {
'a' =>
int(3)
'b' =>
int(2)
}
答案 1 :(得分:1)
问题在于,当您包含第一个数据项0 => 'Originality\''
时,文本中会出现一个引号。当您使用引号分隔符构建字符串时,这会破坏格式。您最终会...
INSERT INTO worker_skills(worker_username, skill, level)
VALUES('username', 'Originality'', 'level')";
这也可能是其他文本的问题。您应该切换为使用准备好的语句,然后插入类似...的数据
$insert = $conn->prepare("INSERT INTO worker_skills(worker_username, skill, level)
VALUES(?, ?, ?)");
foreach(array_combine($skills, $skills_level) as $skill => $skill_level) {
$insert->bind_param("sss", $worker_username, $skill, $skill_level);
$insert->execute();
}
(我尚未对此进行测试,但是请告诉我您是否仍然有问题)。