带有continue的Skip元素在PHP中无法正常工作


Skip element with continue is not working properly in PHP

我在foreach()中跳过元素时遇到问题。当RESERVED时,它应该跳过所有$priznaky[$key],但它将只跳过第一个RESERVED,并显示所有其他RESERVED:

foreach ($priznaky as $key=>$value) {     
  if($priznaky[$key] == "RESERVED"){
    continue;
  }
  else{
    $data1 .= "
      <tr>
        <td>" .$priznaky[$key]. "</td>
        <td>" .$zapsan. "</td> 
      </tr>
    ";    
  }
}

print_r($priznaky);:结果

(
    [0] => RESERVED
    [1] => 
příznak existence subjektu v Obchodním rejstříku
    [2] => 
příznak existence subjektu ve statistickém Registru ekonomických subjektů
    [3] => 
příznak existence subjektu v Registru živnostenského podnikání
    [4] => 
příznak existence subjektu v Registru zdravotnických zařízení
    [5] => 
příznak existence subjektu v Registru plátců daně z přidané hodnoty
    [6] => 
příznak existence subjektu v Registru plátců spotřební daně
    [7] => 
RESERVED
    [8] => 
příznak existence subjektu v registru Centrální evidence úpadců - konkurz
    [9] => 
příznak existence subjektu v registru Centrální evidence úpadců - vyrovnání
    [10] => 
příznak existence subjektu v registru Centrální evidence dotací z rozpočtu
    [11] => 
příznak existence subjektu v účelovém registru organizací systému ARIS
    [12] => 
RESERVED
    [13] => 
příznak existence subjektu v Registru církví a náboženských společností
    [14] => 
příznak existence subjektu v Seznamu politických stran a hnutí
    [15] => 
RESERVED
    [16] => 
RESERVED
    [17] => 
RESERVED
    [18] => 
RESERVED
    [19] => 
příznak existence subjektu v seznamu Občanských sdružení a spolků
    [20] => 
příznak existence subjektu v Zemědělském registru
    [21] => 
příznak existence subjektu v Insolvenčním rejstříku
    [22] => 
příznak existence subjektu v Rejstříku škol a školských zařízení
    [23] => 
RESERVED
    [24] => 
RESERVED
    [25] => 
RESERVED
    [26] => 
RESERVED
    [27] => 
RESERVED
    [28] => 
RESERVED
    [29] => 
RESERVED
    [30] => 
)

数据中似乎有换行符。从您的print_r():

    [0] => RESERVED
    [15] => 
RESERVED
    [16] => 
RESERVED
    [17] => 
RESERVED
    [18] =>
RESERVED

看到区别了吗?所以trim()就是了。此外,如果你改变逻辑,只使用$value而不需要continue会更容易:

foreach($priznaky as $value) {
    if(trim($value) !== "RESERVED"){
        $data1 .= "
          <tr>
            <td>" .$value. "</td>
            <td>" .$zapsan. "</td> 
          </tr>
        ";    
    }
}

如果换行不是唯一的问题,您也可以检查strpos($value, 'RESERVED') !== false