使用 php 随机 select 从目录中获取图像并将其文件名用于 mysql 查询
Randomly select image an from directory using php and use its filename for a mysql query
我有一个名为*.jpg 的图像目录,其中* 是MySQL table 中每条记录的ID。例如1394.jpg
我想做的是使用 PHP 从该目录中随机抽取 5 张图片,然后针对每张图片查询 MySQL table 的记录匹配该 ID / 图像文件名,这样我就可以显示每条记录的详细信息。
我正在寻找一些指导的部分是如何 a) 使用 php 随机选择 5 张图像,然后 b) 识别文件名。一旦我将文件名作为变量,我确信我应该能够编写 MySQL 查询。这是我正在努力解决的 PHP 元素。
谁能给点建议?
我会这样做,首先获取文件夹的所有图像
$files = glob("$dir/*.{jpg,jpeg}", GLOB_BRACE);
然后,我会使用 array_rand
随机得到一张(你可以做一个循环)图片,像这样
$file = array_rand($files); // You can check if is repeated or something too
最后,您可以 preg_replace
文件的名称以仅获取名称(不带扩展名)并使用该名称查询您的数据库...(也许还有其他方法,但这很简单和快速)
好的,我们将按以下步骤进行:
- 从所需目录获取文件名列表
Function : scandir()
look for more details here
存储在数组中
获取随机5数据
Function array_rand()
look for more details here
- 每个文件运行查询详情
Loop - Foreach() - Store MySQL-fetched-data in multi-dimensional Array
- 显示
如果数据库中的文件信息是关于文件系统中图像文件的最新信息,您可以直接从数据库中获取 5 个随机文件名 ID 以及其他信息:
$sql = 'SELECT * FROM image_files ORDER BY RAND() LIMIT 5';
这将 return 您将 ID 连同您在 table 中的其他信息一起归档。
编辑:显然文件系统中不存在数据库中的所有文件。所以下面是更新的答案:
// Get files info from db in random order
$sql = 'SELECT * FROM image_files ORDER BY RAND()';
$result = $conn->query($sql);
// Pick first 5 files that does exist in file system
$five_files=Array();
while($row = $result->fetch_assoc()) {
$filepath = '/dir/images/'.$row['id'].'.jpg';
if (is_file($filepath)) {
$five_files[] = $row;
if (count($five_files) == 5) break;
}
}
// This will have info on five randomly picked files from db that does exist
print_r($five_files);
我有一个名为*.jpg 的图像目录,其中* 是MySQL table 中每条记录的ID。例如1394.jpg
我想做的是使用 PHP 从该目录中随机抽取 5 张图片,然后针对每张图片查询 MySQL table 的记录匹配该 ID / 图像文件名,这样我就可以显示每条记录的详细信息。
我正在寻找一些指导的部分是如何 a) 使用 php 随机选择 5 张图像,然后 b) 识别文件名。一旦我将文件名作为变量,我确信我应该能够编写 MySQL 查询。这是我正在努力解决的 PHP 元素。
谁能给点建议?
我会这样做,首先获取文件夹的所有图像
$files = glob("$dir/*.{jpg,jpeg}", GLOB_BRACE);
然后,我会使用 array_rand
随机得到一张(你可以做一个循环)图片,像这样
$file = array_rand($files); // You can check if is repeated or something too
最后,您可以 preg_replace
文件的名称以仅获取名称(不带扩展名)并使用该名称查询您的数据库...(也许还有其他方法,但这很简单和快速)
好的,我们将按以下步骤进行:
- 从所需目录获取文件名列表
Function :
scandir()
look for more details here
存储在数组中
获取随机5数据
Function
array_rand()
look for more details here
- 每个文件运行查询详情
Loop - Foreach() - Store MySQL-fetched-data in multi-dimensional Array
- 显示
如果数据库中的文件信息是关于文件系统中图像文件的最新信息,您可以直接从数据库中获取 5 个随机文件名 ID 以及其他信息:
$sql = 'SELECT * FROM image_files ORDER BY RAND() LIMIT 5';
这将 return 您将 ID 连同您在 table 中的其他信息一起归档。
编辑:显然文件系统中不存在数据库中的所有文件。所以下面是更新的答案:
// Get files info from db in random order
$sql = 'SELECT * FROM image_files ORDER BY RAND()';
$result = $conn->query($sql);
// Pick first 5 files that does exist in file system
$five_files=Array();
while($row = $result->fetch_assoc()) {
$filepath = '/dir/images/'.$row['id'].'.jpg';
if (is_file($filepath)) {
$five_files[] = $row;
if (count($five_files) == 5) break;
}
}
// This will have info on five randomly picked files from db that does exist
print_r($five_files);