0

我有一个名为的对象Index,它有一个名为的属性_fletter(在本例中为私有属性)。

我有一个 sql 查询,它使用以下查询从表中获取所有不同的值:

SELECT DISTINCT fletter FROM books ORDER BY fletter ASC

我调用这个查询的方式是通过一个私有函数来处理所有与数据库相关的东西并返回一个变量:

function getFirstLetter() {
    // Database stuff omitted
    $stmt->execute();
    $res = $stmt->fetchAll(PDO::FETCH_ASSOC);
    return $res;
}

我将结果赋予_fletter属性的方式如下:

$this->_fletter = $this->getFirstLetter();

最终发生的是, 的属性$this->_fletter是一个关联数组,当print_r它给出:

[0] => Array
    (
        [fletter] => A
    )
    // etc.

然后我想使用一个foreach语句,它遍历每个_fletter[x]x 对应于所讨论字母的位置并运行以下 sql 语句

SELECT booktitle, isbn, pages FROM books WHERE booktitle = ':booktitle'

然后我想像前面的例子一样返回结果:

$this->_fletter = $this->getBookTitles();

而且,我的想法是,我希望将新关联数组的结果添加到第_fletter一个字母对应于新结果集的数组中,类似于:

[0] => Array
    (
        [fletter] => [A]
            (
                [1] => 'A time to kill'
                [2] => 'Almost Famous'
            )
    ) //etc - note I may not have written the syntax correct

因此,新查询必须取 '_fletter' 的值,运行查询并在与第一个字母相同的位置或相同的数组条目下返回结果。所以我希望fletter成为新结果数组的新键或其他东西

如果我只是将新结果添加到_fletter数组中,它只会追加到现有数组而不使用的值,[fletter]而是会将新条目添加到数组中:

[15] => Array
        (
            [fletter] => W
        )

    [A] => Array
        (
            [0] => Array
                (
                    [booktitle] => A Time to kill
                    [isbn] => 1234567890
                )

有什么想法可以实现吗?我想避免将 php 放在页面的 html 部分,但是,如果没有其他选择,我可能不得不这样做。

4

1 回答 1

1

你真的很难理解你想要什么。我认为您只需要一个查询和一个 foreach

SELECT fletter, booktitle, isbn, pages FROM books

<?php
$fletters = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $index = $row['fletter'];
    unset($row['fletter']);
    $fletters[$index][] = $row;
}
于 2013-04-05T11:52:06.850 回答