如何在foreach循环中获得最高数字

时间:2017-04-13 11:04:44

标签: php

我有一个返回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

你可以告诉我我失败了吗?

5 个答案:

答案 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;
 }