每个循环都带有a的布尔值

时间:2014-07-31 14:33:51

标签: php

我在过去一小时内失败了,其中包含一个简单的布尔项,涉及每个循环。这是它的方式。

//this is in an include file 
$fetchData = True; // cannot be changed since most pages use it and it works fine 
since they dont use a for each loop there.

//main page
$categories = array (
        'CAT1' => array('alias' => 'mediterranean-cuisine', 'name' => 'Mediterranean Cuisine'),
        'CAT2' => array('alias' => 'asian-cuisine', 'name' => 'Asian Cuisine'),
        'CAT3' => array('alias' => 'greek-cuisine', 'name' => 'Green Cuisine')
    );

$category = 'asian-cuisine';

    foreach($categories as $alias) {
        if($alias['alias'] === $category) {
            $category = $alias['name'];
            break;
        } else {
            $fetchData = false;// a value was not found in alias
        }
    }

if($fetchData) {
    echo 'Ok to fetch data';
} else {
    echo 'Do not fetch data';
}

整个想法是检查别名中是否存在值,如果存在则继续,或者如果找不到则不执行任何操作。但问题是,它对于第一个问题返回true,但如果是其余部分,则它总是返回false。我该如何做到这一点?

上面,asian-cuisine应该是真的,但我得do not fetch data。你能帮忙吗?

Code

1 个答案:

答案 0 :(得分:3)

这不起作用,因为如果循环中的第一项失败了这条if条件,那么你的布尔值将设置为false。

然后,如果后面的项目通过了条件,那么你就会跳出循环,你的布尔值仍然设置为false。

理想情况下,您可以将布尔值设置为false,并且只有在条件通过时才将其设置为true。但是你建议这是不可能的,所以在你休息之前简单地将它设置为true:

foreach($categories as $alias) {
    if($alias['alias'] === $category) {
        $category = $alias['name'];
        $fetchData = true;//<--important
        break;
    } else {
        $fetchData = false;// a value was not found in alias
    }
}