让我尽可能清楚地描述我的问题。 1。我的数据库中有以下表格
------------------
| id | url |
------------------
| 1 | file1.mp3 |
------------------
| 2 | file2.mp3 |
------------------
| 3 | file3.mp3 |
------------------
第二。我的目录中有以下文件(名为“datas”)
file1.mp3
file2.mp3
file3.mp3
file4.mp3
file5.mp3
第三。现在我的问题 我怎么能得到不在数据库中的文件(file4.mp3和file5.mp3)。从数据目录获取所有文件我正在使用以下代码
$dir = "datas/";
$files = glob($dir . "*.mp3");
foreach($files as $file)
{
echo $file."<br />";
}
希望你得到它,我正在寻找...而且提前为你提供帮助。
答案 0 :(得分:1)
将SQL的结果转换为数组
从glob到数组的结果
比较两个数组并存储array SQL
中array glob
缺少的内容,反之亦然
答案 1 :(得分:1)
这是一个你可以采用的想法(我正在使用程序mysqli
)
$con = mysqli_connect("localhost","root","yourpassword","database_name");
$result = mysqli_query($con,"select url from table_name");
$db_files = array();
while($row = mysqli_fetch_array($result))
{
$db_files[] = 'datas/' . $row['image'];
}
mysqli_close($con);
print_r($db_files);
输出($db_files
)
Array
(
[0] => datas/file1.mp3
[1] => datas/file2.mp3
[2] => datas/file3.mp3
)
现在是glob
$dir = "datas/";
$files = glob($dir . "*.mp3");
print_r($files);
输出($files
)
Array
(
[0] => datas/file1.mp3
[1] => datas/file2.mp3
[2] => datas/file3.mp3
[3] => datas/file4.mp3
[4] => datas/file5.mp3
)
现在,您可以使用
$missing = array_diff($files, $db_files);
print_r($missing);
输出($missing
)
Array (
[3] => datas/file4.mp3
[4] => datas/file5.mp3
)
所以,你可以像
一样循环它foreach($missing as $missing_file) {
echo "$missing_file is not in database<br />";
}
<强>输出:强>
datas/file4.mp3 is not in database
datas/file5.mp3 is not in database
答案 2 :(得分:0)
然后将代码的循环修改为:
foreach($files as $file)
{
if(!in_array($file,$dbfiles))
{
echo $file."<br>;
}
}
了解有关 in_array 的更多信息,请参阅参考资料: