我在目录中有一堆.png,其名称与数据库中的值相同。我想检查数据库中是否存在文件名(不包含' .png')。
目前我正在使用此代码显示数据库中的标记
<?php
$result = mysql_query("SELECT `country` FROM `countries`");
while($row = mysql_fetch_array($result)) {;
?>
<img src="images/countries/<?php echo $row['country']?>.png" />
<?php }; ?>
我想显示数据库中没有的标志,但是然后是灰度。
我想到了这段代码来获取目录中的所有标志
<?php
$directory = "images/countries/";
$images = glob($directory . "*.png");
foreach($images as $image)
{
echo '<image src="'.$image.'" class="flaginactive"/>'; //show all flags as inactive
echo basename($image, '.png'); //get file name with .png
}
?>
但不知何故,我陷入困境,无法在if声明中得到它们。
有人可以告诉我如何以最佳方式解决这个问题。我知道我正在使用旧的mySQL函数。
答案 0 :(得分:2)
有很多方法可以实现这一目标。我将介绍一个。
首先将数据库中的名称加载到数组中。然后检查数组中目录的枚举文件名是否存在,以确定元素的类。
如果在数据库中找不到目录中的文件,则元素显示为非活动状态。
<?php
$directory = "images/countries/";
//Lets save all the file names in the database to an array
$dbImages = array();
$result = mysql_query("SELECT `country` FROM `countries`");
while($row = mysql_fetch_array($result)) {
array_push($dbImages, $directory . $row['country'] . '.png');
}
//Lets go through all the files in the directory and see if they are in the $dbImages array
$images = glob($directory . "*.png");
foreach($images as $image)
{
//Decide the class attribute based on the existence of the file name in $dbImages array
if (in_array($image, $dbImages))
$classAttribute = '';
else
$classAttribute = 'class="flaginactive"'
echo '<image src="'.$image.'" ' . $classAttribute . ' />';
}
?>
答案 1 :(得分:-1)
你可以像这样使用file_exists()函数
<?php
$directory = "images/countries/";
$images = glob($directory . "*.png");
foreach($images as $image)
{
if(file_exists($_SERVER['DOCUMENT_ROOT'] . $directory . $image . '.png')) //Files exists goes here
{
echo '<image src="'.$image.'" class="flaginactive"/>'; //show all flags as inactive
echo basename($image, '.png'); //get file name with .png
}
}
?>
答案 2 :(得分:-1)
循环遍历数据库中的标志并将它们存储在数组中。然后在循环遍历目录中的标志时,检查文件是否在数组中。 (假设目录中的文件在数据库中具有相同的名称,对于您的情况似乎并非如此。我的答案需要进行一些调整。)
<?php
$result = mysql_query("SELECT `country` FROM `countries`");
$selectedFlags = array();
while($row = mysql_fetch_array($result)) {
$selectedFlags[] = $row['country'];
}
$directory = "images/countries/";
$images = glob($directory . "*.png");
foreach($images as $image) {
echo '<image src="'.$image . '"';
if (!in_array($image, $selectedFlags))
echo ' class="flaginactive"';
echo ' />';
// not sure why the next line is here since your sample image didn't have it but I'll leave it in
echo basename($image, '.png'); //get file name with .png
}
?>
P.S。在大括号(;
)之后你不需要用分号({
)