通过遍历数组查找字符串 php
Finding a string by looping through an array php
我有这个数组 $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;
}
这个 returns 5,如果我包括 break it returns 1 而我期望得到 4.
请有人指出我正确的方向,或者即使有更好的方法来做到这一点,我也会非常感激...
谢谢保罗,
从 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.
break
exists every PHP loop directly when it is called, even if there are other elements. Use continue
to get to the next element.
根据您的问题
I'm trying to loop through and find the first array position a .eml file exists
function firstFileInList($filelist) {
foreach($filelist as $k => $v)
if(strpos($v, ".eml") !== false)
return $k;
return false;
}
function firstFileInList($filelist) {
$key=false;
foreach ($filelist as $key=>$value) {
if(strpos($value, ".eml") !==false){
break;
}
}
return $key;
}
如果没有匹配,你会得到错误。
问题出在这里:
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
。
我有这个数组 $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;
}
这个 returns 5,如果我包括 break it returns 1 而我期望得到 4.
请有人指出我正确的方向,或者即使有更好的方法来做到这一点,我也会非常感激...
谢谢保罗,
从 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.
break
exists every PHP loop directly when it is called, even if there are other elements. Usecontinue
to get to the next element.
根据您的问题
I'm trying to loop through and find the first array position a .eml file exists
function firstFileInList($filelist) {
foreach($filelist as $k => $v)
if(strpos($v, ".eml") !== false)
return $k;
return false;
}
function firstFileInList($filelist) {
$key=false;
foreach ($filelist as $key=>$value) {
if(strpos($value, ".eml") !==false){
break;
}
}
return $key;
}
如果没有匹配,你会得到错误。
问题出在这里:
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
。