[英]Issue with PHP trim
在過去的4個小時里,我的頭一直撞着,我不明白為什么我的第二個修剪會造成重復。 這段沒有修飾的代碼效果很好,可以產生我想要的。
<h1>Offline Phones</h1>
<?php
// Query For All Peers
exec("/usr/sbin/asterisk -r -x 'sip show peers'", $response);
foreach($response as $line) {
$offline = $line;
if (strpos($offline, "UNKNOWN")>0) {
print "<span style='color:red;'>$offline</span><br>";
}
}
?>
<h1>Online Phones</h1>
<?php
// Query For All Peers
exec("/usr/sbin/asterisk -r -x 'sip show peers'", $responses);
foreach($responses as $lines) {
$online = $lines;
if (strpos($online, "OK")>0) {
print "<span style='color:green;'>$online</span><br>";
}
}
?>
上面的代碼產生:脫機電話
302(未指定)DNA 0未知(303)(未指定)DNA 0 UNKNOWN 304(未指定)DNA 0 UNKNOWN 305(未指定)DNA 0 UNKNOWN 306(未指定)DNA 0 UNKNOWN在線電話
301/301 192.168.1.96 DNA 45009正常(6毫秒)307/307 192.168.1.112 DNA 50175正常(5毫秒)
但是,當我向兩個查詢添加修剪(請參見下面的代碼)時,第二個查詢就有重復的項目。
<h1>Offline Phones</h1>
<?php
// Query For All Peers
exec("/usr/sbin/asterisk -r -x 'sip show peers'", $response);
foreach($response as $line) {
$offline = $line;
if (strpos($offline, "UNKNOWN")>0)
$clean_offline = trim($offline, '(Unspecified) D N A 0 UNKNOWN');
{
echo "<span style='color:red;'>$clean_offline</span><br>";
}
}
// Query For All Peers
exec("/usr/sbin/asterisk -r -x 'sip show peers'", $responses);
foreach($responses as $lines) {
$online = $lines;
if (strpos($online, "OK")>0)
$clean_online = trim($online);
{
echo "<span style='color:green;'>$clean_online</span><br>";
}
}
?>
此代碼產生重復項,如下面的輸出所示。 您會發現我什至沒有添加修剪規則。
302303304305305306306306
301/301 192.168.1.96 DNA 45009正常(5毫秒)301/301 192.168.1.96 DNA 45009正常(5毫秒)301/301 192.168.1.96 DNA 45009正常(5毫秒)301/301 192.168.1.96 DNA 45009正常(5 ms)301/301 192.168.1.96 DNA 45009正常(5 ms)301/301 192.168.1.96 DNA 45009正常(5 ms)307/307 192.168.1.112 DNA 50175正常(5 ms)307/307 192.168.1.112 DNA 50175正常(5毫秒)
...此處此處應只有301/301 192.168.1.96 DNA 45009 OK(5 ms)和307/307 192.168.1.112 DNA 50175 OK(5 ms)。 誰能告訴我我哪里出問題了?
提前致謝。
您錯過了{}
括號。 if
要在if
之后運行的所有代碼都應包含在其中。 所以
if (strpos($offline, "UNKNOWN")>0)
$clean_offline = trim($offline, '(Unspecified) D N A 0 UNKNOWN');
{
echo "<span style='color:red;'>$clean_offline</span><br>";
}
應該
if (strpos($offline, "UNKNOWN")>0)
{
$clean_offline = trim($offline, '(Unspecified) D N A 0 UNKNOWN');
{
echo "<span style='color:red;'>$clean_offline</span><br>";
}
}
與下一個代碼塊相同
if (strpos($online, "OK")>0)
$clean_online = trim($online);
{
echo "<span style='color:green;'>$clean_online</span><br>";
}
應該
if (strpos($online, "OK")>0)
{
$clean_online = trim($online);
{
echo "<span style='color:green;'>$clean_online</span><br>";
}
}
trim()
並不是問題,而是將$online
分配給$clean_online
的strpos
條件僅被評估一次,並在所有后續迭代中使用。
這看起來不正確:
foreach($response as $line) {
$offline = $line;
if (strpos($offline, "UNKNOWN")>0)
$clean_offline = trim($offline, '(Unspecified) D N A 0 UNKNOWN');
{
echo "<span style='color:red;'>$clean_offline</span><br>";
}
}
它看起來應該像這樣:
foreach($response as $line)
{
// strpos returns a position if exists, ZERO is valid
// you get boolean false if it does not exist
if(strpos($line, "UNKNOWN"))
{
echo "<span style='color:red;'>".trim($line, '(Unspecified) D N A 0 UNKNOWN')"</span><br>";
}
elseif(strpos($online, "OK"))
{
echo "<span style='color:green;'>".trim($line)."</span><br>";
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.