我在过去一小时内失败了,其中包含一个简单的布尔项,涉及每个循环。这是它的方式。
//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
。你能帮忙吗?
答案 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
}
}