将多维数组对象映射到类中的变量

时间:2014-05-22 22:33:01

标签: php mysql arrays oop

我正在使用PDO查询MySQL数据库并根据其模型类型返回一组自行车。返回的多维数组包含各种属性(部件号,颜色,大小等),并通过递增数字键来索引。像这样:

   [0] => Array
      (
        [ItemId] => KL-5000-Y
        [SeatType] => Leather
        [Speed] => 5
        [Model] => Killer
        [Color] => Yellow
      )

   [1] => Array
      (
        [ItemId] => KL-5000-B
        [SeatType] => Leather
        [Speed] => 5
        [Model] => Killer
        [Color] => Black
      )

此数组已分配给变量 $ results

然后我有一个名为Bike的类,用于将各种属性映射到受保护变量,我可以使用公共getter方法访问应用程序中的其他位置。其中一些方法包含其他逻辑,但这里的主要目标是在数据库结构和应用程序中其他位置的属性表示之间添加一个抽象层。

     class Bike 
     {
       private $ItemId;
       private $SeatType;
       private $Model;
       private $Color;

     public function __construct($results) 
     {
       if(is_array($results)) {
         $this->ItemId            = $result[x]['ItemId'];
         $this->SeatType          = $result[x]['SeatType'];
         $this->Model             = $result[x]['Model'];
         $this->Color             = $result[x]['Color'];
 }
     }


     public function getItemId()
     {
       return $this->ItemId;
     }

     public function getSeatType()
     {
       return $this->SeatType;
     }

     //etc.

我遇到的问题是:

1。)弄清楚如何在Bike类中正确遍历数组(参见上面的“[x]”)
2.)然后找出如何在我的html模板中正确实例化对象

目标是有一个表,列出特定模型的所有属性,由项目ID索引:

  <table>
  <thead>
    <th>ITEM ID</th>
    <th>SEAT TYPE</th>
    <th>MODEL</th>
    <th>COLOR</th>
  </thead>
  <tbody>

    <?php $bike = new Bike($results); ?>
    <tr>
    <td><?php echo $bike->getItemId();?></td>
    <td><?php echo $bike->getSeatType();?></td>
    <td><?php echo $bike->getModel(); ?></td>
    <td><?php echo $bike->getColor(); ?></td>
    </tr>
  </table>

我可以通过上面的方法来回显一个对象,但不是多个。提前道歉。我对编程比较陌生,我认为这有一个相对简单的解决方案,但我无法弄明白或在其他地方找到它。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

你正在以错误的方式思考它。当你应该将一个阵列的多个自行车属性变成一个自行车阵列时,你试图将多个自行车的属性数组变成一个自行车。

要将此想法转化为代码,请将此用于您的课程:

class Bike 
{
    private $ItemId;
    private $SeatType;
    private $Model;
    private $Color;

    public function __construct($result) 
    {
        if(is_array($result)) {
            // since $results is now only a single array, there is no need for [x]
            $this->ItemId            = $result['ItemId'];
            $this->SeatType          = $result['SeatType'];
            $this->Model             = $result['Model'];
            $this->Color             = $result['Color'];
        }
    }

    public function getItemId()
    {
        return $this->ItemId;
    }

    public function getSeatType()
    {
        return $this->SeatType;
    }
    .....

所以,首先我们需要将自行车放入阵列中:

<?php
    $bikes = array();
    foreach ($results as $key => $attributes) {
        $bikes[] = new Bike($attributes);
    }
?>

然后将每辆自行车打印到你的桌子上:

<table>
    <thead>
        <th>ITEM ID</th>
        <th>SEAT TYPE</th>
        <th>MODEL</th>
        <th>COLOR</th>
    </thead>
    <tbody>

    <?php foreach ($bikes as $key => $bike): ?>
    <tr>
        <td><?php echo $bike->getItemId();?></td>
        <td><?php echo $bike->getSeatType();?></td>
        <td><?php echo $bike->getModel(); ?></td>
        <td><?php echo $bike->getColor(); ?></td>
    </tr>
    <?php endforeach ?>
</table>

答案 1 :(得分:1)

PDO可以返回更多类型而不仅仅是数组。实际上,它可以返回数据的一种方式是作为实例化对象。甚至不仅仅是stdObject。

检查出来:

class Bike
{
    public $id;
    public $seatType;
    public $model;
    public $color;


    public function getColor(){return $this->color}

}


$stmt = $pdo->prepare('SELECT * FROM bike');
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_CLASS, 'Bike');

这将返回一组实例化的自行车。