SimpleXML 和 foreach

SimpleXML and foreach

我在使用 PHP 和 XML 时遇到了一些问题。如果我需要使用 FOREACH 从 XML 源中过滤特定参数并且特定块不存在,则结果为空。但我需要这样显示:"No active service".

<?php
$data = '<?xml version="1.0" encoding="utf-8" ?>
<note>
  <to>
    <form>pswA</form>
    <heading>A</heading>
  </to>
  <to>
    <form>pswB</form>
    <heading>A</heading>
  </to>
</note>';

$xml = simplexml_load_string($data);
  foreach ($xml->to as $to){
      if     ($to->form == 'pswA' && $to->heading == 'A'){echo "allow";}
      elseif ($to->form == 'pswA' && $to->heading == 'B'){echo "notallow";}
      elseif ($to->form == 'pswA' && $to->heading == 'C'){echo "block";}
  } // this exist and show (allow / notallow / block)

  foreach ($xml->to as $to){
      if     ($to->form == 'pswC' && $to->heading == 'A'){echo "allow";}
      elseif ($to->form == 'pswC' && $to->heading == 'B'){echo "notallow";}
      elseif ($to->form == 'pswC' && $to->heading == 'C'){echo "block";}
  } // but this is empty... how can I show some echo?
?>

是否可以在第二个foreach不存在时显示消息?此示例中的更多内容和实时预览:https://3v4l.org/GhdRT

使用变量来跟踪您是否找到了活动服务。

$xml = simplexml_load_string($data);
$pswA_found = false;
foreach ($xml->to as $to){
    if     ($to->form == 'pswA' && $to->heading == 'A'){
        echo "allow";
        $pswA_found = true;
    }
    elseif ($to->form == 'pswA' && $to->heading == 'B'){
        echo "notallow";
        $pswA_found = true;
    }
    elseif ($to->form == 'pswA' && $to->heading == 'C'){
        echo "block";
        $pswA_found = true;
    }
}
if (!$pswA_found) {
    echo "No active service for pswA";
}

$pswC_found = false;
foreach ($xml->to as $to){
    if     ($to->form == 'pswC' && $to->heading == 'A'){
        echo "allow";
        $pswC_found = true;
    }
    elseif ($to->form == 'pswC' && $to->heading == 'B'){
        echo "notallow";
        $pswC_found = true;
    }
    elseif ($to->form == 'pswC' && $to->heading == 'C'){
        echo "block";
        $pswC_found = true;
    }
}
if (!$pswC_found) {
    echo "No active service for pswC";
}