关联数组从数据库加载并显示为“列”

时间:2014-08-17 13:21:10

标签: php arrays foreach associative

我正在尝试为发票系统创建产品属性的概述。 到目前为止,大多数事情都是使用类和PDO组合在一起的。 我有以下问题。

在我的班上,我创建了一个构建我的产品数组的函数。 它从数据库加载一些信息,以构建此数组。 这个数组,我想用来显示我选择的所有产品:

$ prod1 - $ prod1Name - $ prod1Descr - $ prod1Price
$ prod2 - $ prod2name - $ prod2Descr - $ prod2Price

我认为关联数组可以帮助我创建。 虽然问题是,我不明白如何以这种方式创建多个行和列。 我在考虑类似的事情:
$ prod [1] [“name”] - $ prod [1] [“descr”] - 等
然后在foreach循环中使用它来创建所需数量的新行。 我唯一想到的就是我的index.php(如下所示),因为使用索引([1] defenition)似乎不像我认为应该实现的那样工作。

根据我的理解,我将类中的var指定为数组,然后在加载数据库信息时重新定义数组。 谁能告诉我如何才能解决这个问题?


我有以下课程:

    <?    
    class Invoice{

        var $vendorID;
        var $product = array();

            function product_array(){
                global $db;
                $query = $db->conn->prepare('
                SELECT ProductName, ProductDescription, ProductDuration, ProductPriceInclVat, ProductPriceExclVat, ProductVatType
                FROM products WHERE VendorID = :VendorID
                ');

                $array = array (
                    'VendorID' => $this->vendorID
                );

                $query->execute($array);

                $result = $query->fetchall();

                if (empty($result)){
                    echo"Could not find any products matching your criteria.";
                    die;
                } else {
                        foreach($result as $row) {
                            $this->product = array("Name" => $row['ProductName'],
                                                    "Description" => $row['ProductDescription'],
                                                    "Duration" => $row['ProductDuration'],
                                                    "PriceExclVat" => $row['ProductPriceExclVat'],
                                                    "PriceInclVat" => $row['ProductPriceInclVat'],
                                                    "VatType" => $row['ProductVatType']
                                                    );
                        }

                }       
            }
        }
?>

然后我在index.php上有以下代码:

<?
$invoice = new Invoice();

foreach ($invoice->product as $key => $value){
    echo $key . "<br>";
    echo $value . "$value";

    echo "<br>";
}
?>

2 个答案:

答案 0 :(得分:0)

将结果数组分配给product属性时,每次都会覆盖数组。你需要附加到数组,所以像:

$this->product = array();
foreach($result as $row) {
    $this->product[] = array(...);
}

或者,您可以将fetchAll的结果分配给product属性,如果您不需要重命名字段键(或者您可以在SQL中对它们进行别名)。

答案 1 :(得分:0)

$query = $db->conn->prepare('
                SELECT ProductName as Name,
                ProductDescription as Description, 
                ProductDuration as Duration, 
                ProductPriceInclVat as PriceInclVat, 
                ProductPriceExclVat as PriceExclVat, 
                ProductVatType as VatType
                FROM products WHERE VendorID = :VendorID
                ');

                $array = array (
                    'VendorID' => $this->vendorID
                );

                $query->execute($array);

                $product = $query->fetchall(PDO::FETCH_ASSOC);

$ product现在采用您需要的格式。 在此之后,您可以避免在类发票中使用foreach循环。 另外我注意到你已经创建了函数product_array(),它没有被调用, 所以在index.php中你得到的是空数组(在类Invoice中定义)。 所以在Invoice类中它应该是

$product = product_array()

和product_array函数应该返回值。