2011-05-18 77 views
38

这可能是一个简单的问题,但我很难理解如何解决它。我有一个表格,允许用户选择“定制”或“全部”人员“分配给作业。PDO fetchAll数组到一维

如果选择自定义,用户通过单击每个复选框选择人员,然后将这些插入到作业表。这将产生以下(3,1,图10是工作人员的ID)

Array 
(
    [0] => 3 
    [1] => 1 
    [2] => 10 
) 

如果“全体员工”时,予先查询选择语句从工作人员表得到的所有员工ID的数组,然后将它们插入作业表中,但是这会产生阵列:

Array 
(
    [0] => Array 
     (
      [staffID] => 1 
      [0] => 1 
     ) 

    [1] => Array 
     (
      [staffID] => 23 
      [0] => 23 
     ) 

    [2] => Array 
     (
      [staffID] => 26 
      [0] => 26 
     ) 

    [3] => Array 
     (
      [staffID] => 29 
      [0] => 29 
     ) 
) 

如何将上面的数组转换为所示的第一个数组?

我使用下面的代码来查询数据库以获取所有员工ID,然后插入它们。

$select = $db->prepare("SELECT staffID FROM staff"); 
    if($select->execute()) 
    { 
     $staff = $select->fetchAll(); 
    } 

    for($i = 0; $i<count($staff); $i++) 
    { 
    $staffStmt = $db->prepare("INSERT INTO staffJobs (jobID, userID) VALUES (:jobID, :staffID)"); 
    $staffStmt->bindParam(':jobID', $jobID, PDO::PARAM_INT); 
    $staffStmt->bindParam(':staffID', $staff[$i], PDO::PARAM_INT); 

    $staffStmt->execute();    

} 

第一个数组插入正常,但最后一个数组插入零的staffID。

有什么建议吗?

谢谢=)。

回答

83

查看手册中的example 2。在你的第一个查询中,你可以使用:

$staff = $select->fetchAll(PDO::FETCH_COLUMN, 0); 

而你的第二个数组将具有与第一个数组相同的形式。

+2

非常感谢alot =) – Elliott 2011-05-18 16:23:31

+1

谢谢!您的链接帮助我找到了如何获取'staffID'索引数组:'$ select-> fetchAll(PDO :: FETCH_COLUMN | PDO :: FETCH_GROUP)''。非常酷的东西 – Nico 2014-07-16 09:38:51

3

如果print_r($staff[$i])for里面,你可能会得到

Array 
    (
     [staffID] => 1 
     [0] => 1 
    ) 

这意味着你应该使用$staff[$i]['staffID']代替。


另一种选择,这应该与你当前的代码的工作,就是用PDOStatement::fetchColumn()而不是fetchAll()

+0

谢谢,但难道不这样要求我用两种不同的方法?如第一个数组不包含“staffID”,是不是可以完全删除“staffID”并且只是通过编号引用它? – Elliott 2011-05-18 16:17:02

+0

@Elliot:我明白你的意思了,'fetchColumn()'应该在两种情况下都有效。 – chelmertz 2011-05-18 16:18:19

1

你需要给使用fetchall取回风格

$staff = $select->fetchAll(PDO::FETCH_NUM); 

this link