使用PHP在每个mySQL id中显示一个dir文件名,中途显示。如何解决这个问题?
我会尽力解释我的问题 以下是我的数据: 我有一个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有一个图像,特别是按字母顺序升序的图像 比如说使用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
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将它们按正确的顺序排列。