【问题标题】:Make a 3d array制作一个 3d 数组
【发布时间】:2012-08-30 16:43:46
【问题描述】:

我想从数据库中创建一个包含多维数组的数组。数据库有3张表,一张用于车辆,一张用于损坏,一张用于损坏照片。

Table vehicle 有两列 idname

桌子损坏有四列damagesIDvehicleIDdamagesTypedamagesDescription .

table damagesPhotos 有三列 damagesPhotoIDdamagesIDdamagesPhotoUrl

我需要将这三列组合成一个数组,如下所示:

$vehicle = array( 
   "id" => "somestring", 
   "name" => "somestring", 
   "damages" => array( 
       "damagesType" => "somestring", 
       "damagesDescription" => "somestring", 
          "photoOfDamages" => array( 
            "damagesPhotoUrl" => "somestring" 
          ) 
  ) 
); 

我的代码看起来像这样,但工作方式不正确。

$result = mysql_query( "SELECT * from vehicle v LEFT JOIN damages d ON v.id = d.vehicleID LEFT JOIN damagesPhotos p ON d.damagesID = p.damagesID WHERE d.damagesID = p.damagesID AND v.id = 1") or die(mysql_error());  

$rowsResult  = array();

while ($r = mysql_fetch_assoc($result))
    {
        $rowsResult  [] = $r;       
    }

mysql_free_result($result);

echo json_encode($rowsResult);
...

【问题讨论】:

  • 您只能从车辆开始。数据库用于存储数据,而不是将数据库中的所有数据复制到应用程序中。您仅在应用程序需要时获取特定数据。
  • 你自己真的尝试过吗?
  • CKKiller,是的,我有,但它不起作用。
  • 然后向我们展示您的代码,不管它是否不起作用。发布后,请标记以重新打开。谢谢。

标签: php mysql arrays database


【解决方案1】:

您可以使用数组来做到这一点,但通过使用域对象和数据映射器来填充它们,您会获得更好的结构。

class Vehicle
{
   private $id;
   private $name;
   private $damages; // collection of Damage objects
}

class Damage
{
  private $id;
  private $type;
  private $photos; // collection of photo objects
}

class Photo
{
  private $id;
  private $imageurl;
} 

您的数据映射器将在对象上使用 setter 函数来在请求时填充数据。

【讨论】:

  • +1 用于课程。在散列中使用散列内的散列是类的不良替代品。我想知道编写这样代码的人是如何维护这些东西的……
  • Usign 类是个好主意,但我当时只需要一辆车,结果通过 JSON 传递给我的 Objective-c 代码。所以构建类是在 Objective-c 中完成的。我只需要将表连接在一起,即可通过一次调用从数据库中获取所有数据。
  • 那么为什么不从 Objective-C 访问数据库呢?
  • 因为我无法直接从objective-c (Cocoa) 连接到我的数据库(非本地)。我需要前任。 PHP 通过 JSON 将数据从 mysql 传递到我的应用程序(objective-c,Cocoa)。
【解决方案2】:
$vehicle = array(
    "id" => "somestring",
    "name" => "somestring",
    "damages" => array(
        "type" => "somestring",
        "location" => "somestring",
        "photo" => array(
            "imageurl" => "somestring"
        )
    )
);

对于多辆车,它可能看起来更像这样:

$vehicles = array(
    0 => array(  // you can omit the numeric index, I'm just using it for clarity
        "id" => "somestring",
        "name" => "somestring",
        "damages" => array(
            "type" => "somestring",
            "location" => "somestring",
            "photo" => array(
                "imageurl" => "somestring"
            )
        )
    ),
    1 => array(
        "id" => "somestring",
        "name" => "somestring",
        "damages" => array(
            "type" => "somestring",
            "location" => "somestring",
            "photo" => array(
                "imageurl" => "somestring"
            )
        )
    )
);

【讨论】:

  • 是的,这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2012-01-06
  • 2012-08-27
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多