无法在查询后正确格式化我的数组

时间:2012-03-23 15:56:07

标签: php mysql

我一直这样:

[0] => Array
    (
        [0] => Array
            (
                [thread_id] => 136
                [owner_id] => 1
                [subject] => asdhjkasdh
                [body] => askjdhaksjd
                [timestamp] => 2012-03-22 22:03:51
                [slug] => asdhjkasdh
            )

    )
[1] => Array
    (
        [0] => Array
            (
                [thread_id] => 137
                [owner_id] => 1
                [subject] => asdhjkasdh
                [body] => askjdhaksjd
                [timestamp] => 2012-03-22 22:03:56
                [slug] => asdhjkasdh
            )

    )

但我需要每个[0]和[1]来包含数据,而不是另一个数组。

这是我的代码:初始查询以数组形式返回thread_id。然后我使用thread_id从线程表中提取信息。虽然我似乎无法在数组中正确组织它。

            $query = $this->db->query($sql);
            $result = $query->result_array();
            $thread = array();
            foreach ($result as $thread_id)
            {
                $id = $thread_id['thread_id'];
                $query = $this->db->query("SELECT * FROM thread WHERE thread_id='$id'");
                array_push($thread, $query->result_array());
            }
            print_r($thread);
            return $thread;

谢谢!

3 个答案:

答案 0 :(得分:2)

看起来你的数据库对象正在返回一个被推送到$ thread数组的多维数组。 而不是

array_push($thread, $query->result_array());

$thisRow = $query->result_array();
array_push($thread, $thisRow[0] );

此外,您似乎正在运行一个查询,循环遍历结果,然后运行另一个查询。这通常不是检索数据的非常有效的方法,通常可以使用JOIN进行重构。也许将您的单独查询发布为新问题,以便我们帮助您改进。

答案 1 :(得分:1)

使用array_merge代替array_push然后

答案 2 :(得分:0)

这是因为$query->result_array()会给你一个数组,即使它只有一行。 之后,将该数组推入您的数组($ thread)。

如果您确定总会得到一行,则可以更好地使用

$row = $query->row();

可能会在您的查询中添加LIMIT 1以确保;)

您也可以

$thread[] = $query->row();