簡體   English   中英

PHP修剪問題

[英]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_onlinestrpos條件僅被評估一次,並在所有后續迭代中使用。

這看起來不正確:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM