使用PHP在每个mySQL id中显示一个dir文件名,中途显示。如何解决这个问题?

使用PHP在每个mySQL id中显示一个dir文件名,中途显示。如何解决这个问题?,php,Php,我会尽力解释我的问题 以下是我的数据: 我有一个dir(carimgs)有很多图片。这些图像链接到像1234_img8.jpg 1234_img9.jpg这样的ID。在数据库中找到的id是1234。一个查询车号可能有很多图像,所有车号都有4位数字 从数据库中,我得到了一些ID,如代码中所示。从逻辑上讲,我从mySQL中获得的ID比从dir中列出的图像ID要少 因此,我将从DB获得的ID与从dir获得的所有图像进行比较,并仅显示通过数据库ID找到的图像ID 代码工作正常,并且只从查询中选择具有id

我会尽力解释我的问题

以下是我的数据: 我有一个dir(carimgs)有很多图片。这些图像链接到像1234_img8.jpg 1234_img9.jpg这样的ID。在数据库中找到的id是1234。一个查询车号可能有很多图像,所有车号都有4位数字

从数据库中,我得到了一些ID,如代码中所示。从逻辑上讲,我从mySQL中获得的ID比从dir中列出的图像ID要少

因此,我将从DB获得的ID与从dir获得的所有图像进行比较,并仅显示通过数据库ID找到的图像ID

代码工作正常,并且只从查询中选择具有id的图像。但是,问题是所有链接到id的图像都会显示,但我只希望每个id有一个图像,特别是按字母顺序升序的图像

比如说

5667-054.jpg
5667-055.jpg
5667-056.jpg
5667-057.jpg
5667-058.jpg
5667-059.jpg
5667-060.jpg
我想要5667-054.jpg

来自

5659-DSC01703.jpg
5659-DSC01704.jpg
5659-DSC01705.jpg
5659-DSC01703.jpg

以下是我得到的结果,例如:

database ids: 4814,5513,5014,5633
images: 4814-161.jpg,5513-223.jpg,5014-008.jpg,5633-5112509_t_b.jpg ......... 4814-147.jpg,5388-099.jpg,5353-039.jpg,5351-005.jpg,5558-003.jpg
您可以看到我获得了所有4814张图像

这是我的密码

我怎样才能做到这一点

//get the car ids based on the query
$dbid=mysql_query("SELECT id FROM cars where disabled=0 and guar=1 order by id asc");
while($carid = mysql_fetch_assoc($dbid)) { 
$alldbids .= $carid[id].',';
 } 
 $alldbids = substr($alldbids, 0, -1);


 $idsArray = explode(',', $alldbids);


$hasImages = array();
$xalloumi = array();

foreach (new DirectoryIterator(__DIR__ . '/carimgs') as $fileInfo) {
    if ($fileInfo->isDot() || $fileInfo->isDir()) {
        continue;
    }

    foreach ($idsArray as $id) {
        if (0 === strpos($fileInfo->getBasename(), $id)) {
            $hasImages[] = $id;
            $xalloumi[] = $fileInfo->getBasename();
            break;
        }
    }
}

$hasImages = array_unique($hasImages);

$xalloumi = array_unique($xalloumi);

 var_dump( implode( ',', $hasImages ) );
  var_dump( implode( ',', $xalloumi ) );
使用
glob()
获取与ID匹配的所有文件名。它将返回排序后的文件名,以便您可以从列表中获取第一个文件名

foreach ($idsArray as $id) {
    $files = glob(__DIR__ . '/carimgs/' . $id .'-*.jpg');
    if (!empty($files)) {
        $hasInfo[] = $id;
        $xalloumi[] = basename($files[0]);
    }
}
此外,填充
$IDSRARY
的代码可以简化为:

$idsArray = array();
while ($row = mysql_fetch_assoc($dbid)) {
    $idsArray[] = $row['id'];
}
您不需要创建字符串就可以将其分解为数组。

使用
glob()
获取与ID匹配的所有文件名。它会将它们排序返回,以便您可以从列表中获取第一个名称

foreach ($idsArray as $id) {
    $files = glob(__DIR__ . '/carimgs/' . $id .'-*.jpg');
    if (!empty($files)) {
        $hasInfo[] = $id;
        $xalloumi[] = basename($files[0]);
    }
}
此外,填充
$IDSRARY
的代码可以简化为:

$idsArray = array();
while ($row = mysql_fetch_assoc($dbid)) {
    $idsArray[] = $row['id'];
}

您不需要创建字符串就可以将其分解为数组。

“每个id只需要一个图像”-将
DISTINCT
添加到查询中。@Fred ii-数据库不包含重复的id。这是一个查询车号和很多images@Fred-ii-如果dir图像上有一个基于前4位数字的力…嗯。。。我懂了。让我重新思考一下这个问题。
$xalloumi[]
是文件夹中的图像名称数组吗?您可以
sort()
it将它们按正确的顺序排列。“我每个id只需要一个图像”-将
DISTINCT
添加到您的查询中。@Fred ii-数据库不包含重复的id。这是一个查询车号和很多images@Fred-ii-如果dir图像上有一个基于前4位数字的力…嗯。。。我懂了。让我重新思考一下这个问题。
$xalloumi[]
是文件夹中的图像名称数组吗?您可以
sort()
it将它们按正确的顺序排列。