如何打破foreach循环以停止执行其他阻止?

时间:2015-10-08 21:55:57

标签: php arrays foreach

如何在foreach循环中停止执行其他数据块中的项目数?这可能吗,还是我应该更改程序逻辑?

伪代码在这里是为了说明我想要做的事情:

input = 2
array = [1,2,3,4,...]
foreach item in array
    if input equals 3
      logs MATCH
    else
      logs NOT MATCH // logs once for 1, not for 2, logs for 3,4,number of items
end foreach

我尝试过break,但是我没有得到预期的效果,如果我打破了else,在第一次运行时,foreach循环将被停止,在这种特殊情况下,数组中的第二项永远不会被测试。

Actuall代码如下,但我希望伪代码足够清晰。

// take user input
$phone_number = '004913535030';
// initialize countrycodes
$countrycodes = [385,49,386];

// is number local number, one or zero zeros, two digit local or mobile code, and 6 or 7 digits?
if (preg_match('(^0*\d{0,2}\d{6,7}$)', $phone_number))
{
    // If yes, then we deal with local number, without country code prefix
    // Remove zeroes at begining if any, and add "+countrycode(385)." in front of clean number
    echo "local number";
    echo 'Original number is: ' . $phone_number . '<br>';
    echo 'Country code is not matched!';
    echo '<br>' . 'Stripped number is: ' . preg_replace("/^(0+)/", '', $phone_number);
    echo '<br>' . 'Formatted number is: ' . '+' . $countrycodes[0] . '.' . preg_replace("/^(0{1,}$countrycodes[0])|^($countrycodes[0])|^(0+)/",'',$phone_number);
}
else 
{   
    // bla bla, for each item in array check match, then strip number, and format it according to EPP RFC standard
    foreach($countrycodes as $countrycode )
    {
        // Do we have country code in phone number and number longer than 9 characters? Then some of EU members phone number
        // Clean number, remove zeroes at begining if any, and add "+countrycode." in front of clean number
        if (preg_match("/^(0{1,}$countrycode\d{8,})|^($countrycode\d{8,})/", $phone_number, $match[0]))
        {
            echo 'Original number is: ' . $phone_number . '<br>';
            echo 'Country code is matched ' . '<br>' . 'Country code is:' . $countrycode;
            //print_r($match);
            // strip country code and one or more preceding zeros
            echo '<br>' . 'Stripped number is: ' . preg_replace("/^(0{1,}$countrycode)|^($countrycode)|^(0+)/", '', $phone_number);
            echo '<br>' . 'Formatted number is: ' . '+' . $countrycode . '.' . preg_replace("/^(0{1,}$countrycode)|^($countrycode)|^(0+)/",'',$phone_number);
            // break
        }
        // HOW TO PREVENT EXECUTING OF ELSE BLOCK NUMBER OF ITEMS IN COUNTRYCODES ARRAY TIMES BUT PRINT WHEN COUNTRYCODE NOT MATCHED?
        else
        {
            echo "Not an EU number";
        }
    }
}

2 个答案:

答案 0 :(得分:0)

你要问的是什么并不完全清楚,但我会采取刺。

如果找到匹配项,是否要阻止循环处理?然后你正在寻找的命令是break;

foreach($countrycodes as $countrycode )
{
    if (preg_match("/^(0{1,}$countrycode\d{8,})|^($countrycode\d{8,})/", $phone_number, $match[0]))
    {
        echo 'Original number is: ' . $phone_number . '<br>';
        echo 'Country code is matched ' . '<br>' . 'Country code is:' . $countrycode;
        echo '<br>' . 'Stripped number is: ' . preg_replace("/^(0{1,}$countrycode)|^($countrycode)|^(0+)/", '', $phone_number);
        echo '<br>' . 'Formatted number is: ' . '+' . $countrycode . '.' . preg_replace("/^(0{1,}$countrycode)|^($countrycode)|^(0+)/",'',$phone_number);
        break;
    }
    else
    {
        echo "Not an EU number";
    }
}

break;命令将停止处理循环。

答案 1 :(得分:0)

我想您要查看包含所有国家/地区代码的电话号码,如果不匹配,请打印一次结果。我认为你不需要其他条件。你应该试试这个:

$matched = false;
 foreach($countrycodes as $countrycode )
    {
        // Do we have country code in phone number and number longer than 9 characters? Then some of EU members phone number
        // Clean number, remove zeroes at begining if any, and add "+countrycode." in front of clean number
        if (preg_match("/^(0{1,}$countrycode\d{8,})|^($countrycode\d{8,})/", $phone_number, $match[0]))
        {
            echo 'Original number is: ' . $phone_number . '<br>';
            echo 'Country code is matched ' . '<br>' . 'Country code is:' . $countrycode;
            //print_r($match);
            // strip country code and one or more preceding zeros
            echo '<br>' . 'Stripped number is: ' . preg_replace("/^(0{1,}$countrycode)|^($countrycode)|^(0+)/", '', $phone_number);
            echo '<br>' . 'Formatted number is: ' . '+' . $countrycode . '.' . preg_replace("/^(0{1,}$countrycode)|^($countrycode)|^(0+)/",'',$phone_number);
$matched = true;            
break;
        }

    }
if (!$matched) {
echo "Not an EU number";
}