PHP を使用して MySQL テーブルを配列に変換しようとしています。イメージ テーブルの各リスティング ID には少なくとも 1 つのイメージ 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 よりも 1 つ多くの要素が含まれています)。同じ画像テーブルからデータを取得しているため、同じ数の要素を持つ必要があるため、これは私には困惑しています。
私のコード:
//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);
2 つ目の問題は、foreach ループが実行されるたびに PHP が次のメッセージを返すことです。
注意: 未定義のオフセット: C:\mypath\getimage.php の 78 行目の 2789
2789行目は画像テーブルの最後の行なので、このエラー通知は$lidと$prodの要素数が1ずつ違うことが関係しているのではないかと思います。
どんな提案でも大歓迎です。また、このタスクを達成するためのより効率的な方法を考えられるかどうか教えてください。
ありがとう、