正如标题所说,有没有更简单的方法来使用 scandir 返回值20.jpg-40.jpg而不必返回所有整个目录?
答案 0 :(得分:1)
简短回答:不,没有通用的方法来返回一系列文件名。
答案很长:在您的情况下,您可以使用glob()
' pattern matching:
foreach (glob("[23][0-9].jpg") as $filename) {
echo "$filename" . "\n";
}
会将20.jpg
返回39.jpg
。要获得40.jpg
,你似乎也不走运。
glob
模式匹配是某种正则表达式,但肯定不如使用preg_match()
或编写自己的算法那么强大。
答案 1 :(得分:0)
我以前没有时间回答,但我认为这是一个更好的解决方案,因为它可以自定义。
我使用scandir,因为代码必须查看每个文件
使用glob,您可以创建一个简单的模式,可能会让您希望有更好的选择
使用scandir我抓住它们并使用例如array_filter自己过滤它们。
public class LoadRepository :Repository<Load, LoadModel>,ILoadRepository
{
IUSCanadaCityStateRepository _USCanadaCityStateRepository;
public LoadRepository(DbContext dbContext, IUSCanadaCityStateRepository USCanadaCityStateRepository) : base(dbContext)
{
_USCanadaCityStateRepository = USCanadaCityStateRepository;
}
public int GetPickUpLocations(int loadId)
{
var count = _dbSet.FromSql("SELECT COUNT(LocationID) as locationCount FROM vPickupLoc WHERE vPickupLoc.LoadID = @p0", loadId).ToArray();
return count[0].LoadLocations.Count;
}
public LoadCarrierInfo UpdateCarrierInfo(LoadCarrierInfo loadCarrierInfo)
{
return _dbSet.FromSql("UpdatePickCarrier @CarrierID,@LoadID, @Primary,@AssistingPortalID,@AssistingEmployeeID",
new SqlParameter("LoadID", SqlDbType.Int) { Value = loadCarrierInfo.LoadId },
new SqlParameter("Dispatcher", SqlDbType.VarChar) { Value = loadCarrierInfo.Dispatcher },
new SqlParameter("EmployeeID", SqlDbType.Int) { Value = 1 }, // logged in Employee instead
new SqlParameter("AssistingPortalID", SqlDbType.Int) { Value = loadCarrierInfo.AssistingPortalId },
new SqlParameter("AssistingEmployeeID", SqlDbType.VarChar) { Value = loadCarrierInfo.AssistingEmployeeId })
.Select(x=>new LoadCarrierInfo { }).FirstOrDefault();
}
}
这是未经测试的代码,因为我从手机输入并且没有任何东西需要测试,但理论上它应该有用。
答案 2 :(得分:-1)
比特命中或错过,取决于您的问题,但documentation会浮现在脑海中。
foreach (glob("*20.jpg") as $filename) {
echo "$filename" . "\n";
}
您可以使用正则表达式作为glob的参数。