我有一个返回mp3列表的功能。如果我到达数组中的最后一个元素但我在foreach循环中遇到问题,我想返回HD值为true。它总是返回true。
代码
function funcName() {
foreach($dirs as $d) {
if (filesize($d) > 200) {
$qualities = substr(strrchr(basename($d), "-"), 1);
$qualities = preg_replace('/\\.[^.\\s]{3,4}$/', '', $qualities);
// This is where I check whether it is the last element or not.
$numItems = count($dirs);
$i = 0;
foreach($dirs as $key => $value) {
if (++$i === $numItems) {
$zaa = true;
} else {
$zaa = false;
}
}
$files[] = ["files" => basename($d), "qualities" => $qualities, "hd" => $zaa];
}
}
return ($files);
}
如果我到达最后一个元素,我只想返回$zaa = true
。在我的代码中,始终返回true 。
你可以告诉我我失败了吗?
答案 0 :(得分:1)
您不必再次循环$dirs
,只需这样做:
function funcName() {
$i = 1;
$numItems = count($dirs);
foreach($dirs as $d) {
$i++;
$zaa = $i === $numItems;
if (filesize($d) > 200) {
$qualities = substr(strrchr(basename($d), "-"), 1);
$qualities = preg_replace('/\\.[^.\\s]{3,4}$/', '', $qualities);
// This is where I check whether it is the last element or not.
$numItems = count($dirs);
$files[] = ["files" => basename($d), "qualities" => $qualities, "hd" => $zaa];
}
}
return ($files);
}
答案 1 :(得分:1)
我想这应该有效:
function funcName() {
$numItems = count($dirs);
$i = 0;
foreach($dirs as $d) {
$i++;
if (filesize($d) > 200) {
$qualities = substr(strrchr(basename($d), "-"), 1);
$qualities = preg_replace('/\\.[^.\\s]{3,4}$/', '', $qualities);
if ($i == $numItems) {
$zaa = true;
} else {
$zaa = false;
}
$files[] = ["files" => basename($d), "qualities" => $qualities, "hd" => $zaa];
}
}
return ($files);
}
答案 2 :(得分:0)
你可以通过以下条件改变你的状况。如果你的密钥以0开头,那么你需要(sizeof($ dirs) - 1)来获得总数组元素。
if(sizeof($dirs) == $key)
答案 3 :(得分:0)
使用for循环,如果你使用count()和所有那些语句,它只是在代码中添加无用的行,for(){}将更短,更简单
答案 4 :(得分:0)
以下两个答案都是正确的,但我想出来这个解决方案似乎更快;
if ($d === end($dirs)) {
$zaa = true;
} else {
$zaa = false;
}