foreach嵌套使用 switch 在switch内使用continue无法跳过当前循坏
public function test() {
dump('--testa--');
dump($this->testa()); //continue in switch failure
dump('--testb--');
dump($this->testb()); //continue out switch success
dump('--testc--');
dump($this->testc()); //use if in stead of switch to make sure it is not caused by if
}
private function testa() {
$returns = [];
$tests = [
['type' => 0, 'check' => 1, 'value' => 4],
['type' => 0, 'check' => 1, 'value' => 3],
['type' => 1, 'check' => 1, 'value' => 2],
['type' => 2, 'check' => 1, 'value' => 1],
];
foreach ($tests as $t => $test) {
if ($test['check']) {
switch ($test['type']) {
case 0:
if ($test['value'] > 2) {
continue; //failure
}
break;
case 1:
if ($test['value'] > 2) {
continue; //failure
}
break;
default :
if ($test['value'] > 2) {
continue; //failure
}
break;
}
}
array_push($returns, $test);
}
return $returns;
}
private function testb() {
$returns = [];
$tests = [
['type' => 0, 'check' => 1, 'value' => 4],
['type' => 0, 'check' => 1, 'value' => 3],
['type' => 1, 'check' => 1, 'value' => 2],
['type' => 2, 'check' => 1, 'value' => 1],
];
foreach ($tests as $t => $test) {
$continue = false;
if ($test['check']) {
switch ($test['type']) {
case 0:
if ($test['value'] > 2) {
$continue = true;
}
break;
case 1:
if ($test['value'] > 2) {
$continue = true;
}
break;
default :
if ($test['value'] > 2) {
$continue = true;
}
break;
}
}
if($continue){
continue; //success
}
array_push($returns, $test);
}
return $returns;
}
private function testc() {
$returns = [];
$tests = [
['type' => 0, 'check' => 1, 'value' => 4],
['type' => 0, 'check' => 1, 'value' => 3],
['type' => 1, 'check' => 1, 'value' => 2],
['type' => 2, 'check' => 1, 'value' => 1],
];
foreach ($tests as $t => $test) {
if ($test['check'] && $test['type'] == 0 && $test['value'] > 2) {
continue; //success
}
if ($test['check']) {
if ($test['type'] == 1 && $test['value'] > 2) {
continue; //success
}
if ($test['type'] == 2) {
if ($test['value'] > 2) {
continue; //success
}
}
}
array_push($returns, $test);
}
return $returns;
}
testa返回了4个元素 testb返回了2个元素
实际应该两个都是返回2个元素的