我有这个数组$ filelist
Array ( [0] => . [1] => .. [2] => .DS_Store [3] => 11-96.eml [4] => 11-97.eml )
哪个是特定目录中所有文件的列表...有时候没有.DS_Store文件,有时会有,有时会有2个eml文件,有时会有6个。我试过循环并找到第一个数组位置.eml文件存在,以便我可以计算出有多少文件是eml以及从哪里开始引用数组..我试过...
function firstFileInList($filelist) {
$x = 0;
foreach ($filelist as $value) {
if(strpos($filelist, ".eml") == false) {
$x = $x + 1;
//break;
}
}
return $x;
}
这返回5,如果我包含中断它返回1并且我期望得到4。
请有人指出我正确的方向,或者即使有更好的方法来做到这一点,那么我会非常感激地看到......
谢谢保罗,
答案 0 :(得分:3)
即使有其他元素,
break
在调用时也会直接存在每个PHP循环。使用continue
转到下一个元素。
根据您的问题
我正在尝试循环并找到第一个数组位置.eml文件存在
function firstFileInList($filelist) {
foreach($filelist as $k => $v)
if(strpos($v, ".eml") !== false)
return $k;
return false;
}
答案 1 :(得分:2)
从foreach中的数组中获取键的最佳方法是在键启动之前定义键。尝试使用以下代码更新代码:
function firstFileInList($filelist) {
$x = false;
foreach ($filelist as $key => $value) {
if(strpos($value, ".eml") == false) {
$x = $key;
break;
}
}
return $x;
}
这样做是将$ x设置为实际键而不是像在for()循环中那样增加的数字。 $ key将始终是数组键,因此在此示例中为0,1,2,3,4。
答案 2 :(得分:1)
function firstFileInList($filelist) {
$key=false;
foreach ($filelist as $key=>$value) {
if(strpos($value, ".eml") !==false){
break;
}
}
return $key;
}
如果没有匹配,则会出现错误。
答案 3 :(得分:1)
问题在于:
foreach ($filelist as $value) {
if(strpos($filelist, ".eml") == false) {
请注意,对于您编写的foreach循环,它会获取$filelist
数组的每个元素,并将其放入$value
变量中。也许你没有在PHP中打开警告,但是当我尝试你的代码时,我得到了以下内容:
Warning: strpos() expects parameter 1 to be string, array given in test/a.php on line 6
你想要的是
foreach ($filelist as $value) {
if(strpos($value, ".eml") == false) {
$x = $x + 1;
}
}
注意第二行中的$value
。