我在PHP和XML方面遇到了一些麻烦。如果我需要使用FOREACH
从XML源过滤特定参数并且特定块不存在,则结果为空。但我需要展示这样的东西:“没有活跃的服务”。
<?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
答案 0 :(得分:2)
使用变量来跟踪您是否找到了有效服务。
$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";
}