PHP使用array_combine()跳过第一个数组元素

时间:2018-08-02 05:24:20

标签: php arrays

我对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循环等),但问题仍然存在。有人可以帮我吗?

2 个答案:

答案 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();
}

(我尚未对此进行测试,但是请告诉我您是否仍然有问题)。