我正在尝试使用 PHP 将 MySQL 表转换为数组。图片表中的每个商品 ID 至少有一个图片 ID,但图片 ID 的总数可能会有所不同。
图像表:
|Listing ID | Image ID |
| 1234 | 1 |
| 1234 | 2 |
| 1234 | 3 |
| 1235 | 1 |
| 1235 | 2 |
本质上,我想将图像表转换为具有如下键值对的数组:
array([0] 1234 => /FilePath/1234-1::/FilePath/1234-2::/FilePath/1234-3, [1] 1235 => /FilePath/1235-1::/FilePath/1235-2, ...)
我已经能够编写一些代码,在大多数情况下,它们可以完成这项任务。但是,也存在一些问题。
我的代码的主要问题是 $lid 数组和 $prod 数组不包含相同数量的元素($prod 包含的元素比 $lid 多一个)。这让我感到莫名其妙,因为它们从同一个图像表中提取数据,因此应该具有相同数量的元素。
我的代码:
//Set document path
$target_path = realpath($_SERVER['DOCUMENT_ROOT']). "\mypath\image\uploads\\";
//Query to download all listing IDs in Markers table
$query = $db->query("SELECT * FROM image");
while ($row = $query->fetch(PDO::FETCH_BOTH)) {
$temp[] = $row;
}
foreach($temp as $i=>$v){
$line = $target_path.$v['L_ListingID']."-".$v['L_ImageID'].".jpg";
if($temp[$i]['L_ListingID']==$temp[$i+1]['L_ListingID']){
//appending '::' to each string in the $prod array
$prod[] = $line."::";
}else{
// * will serve as the delimiter in the $prod array
$prod[] = $line."*";
//Add each listing ID into Listing Array
$lid[] = $v['L_ListingID'];
}
}
//Convert the array into a big string
$bigString = implode("", $prod);
//Chop up the big string into sections delimited by '*' and insert into 'prod' array
$prod = explode("*",$bigString);
//Combine $lid array with $prod array
$combo = array_combine($lid, $prod);
第二个问题是,每当运行 foreach 循环时,PHP 都会返回以下消息:
注意:未定义的偏移量:第 78 行 C:\mypath\getimage.php 中的 2789
第 2789 行是图像表中的最后一行,所以我认为这个错误提示可能与 $lid 和 $prod 元素个数相差 1 的事实有关。
任何建议都非常感谢。另外,如果您能想出一种更有效的方法来完成此任务,请告诉我。
谢谢,