我需要在目录中找到一个符合特定条件的文件。例如,我知道文件名以"123-"开头,以.txt结尾,但我不知道两者之间有什么。
我已经启动了代码来获取目录和preg_match中的文件,但卡住了。如何更新它以找到我需要的文件?
$id = 123;
// create a handler for the directory
$handler = opendir(DOCUMENTS_DIRECTORY);
// open directory and walk through the filenames
while ($file = readdir($handler)) {
// if file isn't this directory or its parent, add it to the results
if ($file !== "." && $file !== "..") {
preg_match("/^".preg_quote($id, '/')."\-(.+)\.txt$/" , $file, $name);
// $name = the file I want
}
}
// tidy up: close the handler
closedir($handler);
我在这里为你写了一个小脚本,Cofey。试试这个尺寸。
我更改了自己的测试目录,因此请务必将其设置回常量。
目录内容:
- 123-香蕉.txt
- 123-额外香蕉.tpl.php
- 123-wow_this_is_cool.txt
- 无香蕉.yml
法典:
<pre>
<?php
$id = 123;
$handler = opendir(__DIR__ . 'test');
while ($file = readdir($handler))
{
if ($file !== "." && $file !== "..")
{
preg_match("/^({$id}-.*.txt)/i" , $file, $name);
echo isset($name[0]) ? $name[0] . "nn" : '';
}
}
closedir($handler);
?>
</pre>
结果:
123-banana.txt
123-wow_this_is_cool.txt
preg_match
将其结果保存为数组$name
,因此我们需要通过它的键 0 进行访问。我在第一次检查以确保我们与isset()
匹配后这样做。
您必须测试匹配是否成功。
循环中的代码应该是这样的:
if ($file !== "." && $file !== "..") {
if (preg_match("/^".preg_quote($id, '/')."\-(.+)\.txt$/" , $file, $name)) {
// $name[0] is the file name you want.
echo $name[0];
}
}