foreach嵌套使用 switch 在switch内使用continue无法跳过当前循坏,如何解决?(语言-php)

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个元素的

return true 或者return false来,break和continue在phpforeach中不生效