数组到字符串转换错误

时间:2012-07-16 18:34:16

标签: php arrays string codeigniter implode

我有一个提取ID列表的查询。这些ID在一个数组中,我需要搜索具有这些ID的另一个表。我尝试使用implode使这些ID成为我可以在where子句中使用的字符串,但我一直收到此错误。

我目前的代码是:

 $query = $this->db->query('
        SELECT *
        FROM system_scoperights
        WHERE user = '. $this->session->userdata('username') .'
    ');

    foreach ($query->result() as $row) {
        $scope = $row->site;
        $data[] = $scope;
    } 
    $dataScope[] = $data;

    $idList = implode(',', $dataScope);   <---- Error Line

    $where = 'WHERE scope_scopes.sc_ID IN '. $idList .'';

我尝试过在论坛上发现的不同内容:

 $idList = implode(',', array_values($dataScope));

 $idList = implode(',', join($dataScope));

但这些都不起作用。 (我从来没有听说过连接功能)

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:10)

$dataScope[] = $data;

$data[] = $scope;

因此$dataScope在其数组中有一个数组。 implode仅在一个级别上工作,因此您收到此错误的原因。

您应该注意到这实际上可以在SQL中使用:

 SELECT * FROM some_table WHERE id IN (SELECT site FROM another_table WHERE ... )

这将消除对此代码的全部需求。

那是:

$where = 'WHERE scope_scopes.sc_ID IN (SELECT site
                                       FROM system_scoperights
                                       WHERE user = '. $this->session->userdata('username') . ')';

答案 1 :(得分:3)

我部分同意杰伊的回答......只需删除该行:

$dataScope[] = $data

并直接使用$data变量,因为它已经是一个数组:

$idList = implode(',', $data);

但是你也应该在你的where子句中使用(和):

$where = 'WHERE scope_scopes.sc_ID IN (' . $idList . ')';

在where子句中使用子查询,虽然它们确实有其位置,但可能会花费大量开销,尤其是使用“SELECT *”。永远不要从db表中请求超过你需要的东西:)