2017-06-20 54 views
0

我有多個XML文檔包含來自API的輸出 - 此輸出是來自我們票務系統的支持票據。我正在計算狀態設置爲特定狀態的票數。在PHP中的多個文檔中計算XML元素

XML輸出如下所示(儘管7個文檔中有更多的請求元素)。

<response uri="/api/xml/getRequestsByView"> 
<result> 
    <status>Success</status> 
    <statuscode>200</statuscode> 
    <requests> 
     <request> 
      <form name="requestID">12345</form> 
      <form name="userTimeFormat">dd MMM yyyy, HH:mm:ss</form> 
      <form name="contact">Name</form> 
      <form name="status">Open</form> 
      <form name="statusID">1</form> 
      <form name="priority">P3 Minor</form> 
      <form name="supportRep"/> 
      <form name="supportRepCostPerHour">0.00</form> 
      <form name="createdTime">20 Jun 2017, 08:22:00</form> 
      <form name="updatedTime">20 Jun 2017, 08:23:11</form> 
      <form name="dueByTime"/> 
      <form name="isOverDue">false</form> 
      <form name="accountID"/> 
      <form name="account"/> 
      <form name="subject">Subject Name</form> 
     </request> 
     <request> 
      <form name="requestID">12346</form> 
      <form name="userTimeFormat">dd MMM yyyy, HH:mm:ss</form> 
      <form name="contact">Contact Name</form> 
      <form name="status">Open</form> 
      <form name="statusID">1</form> 
      <form name="priority">P3 Minor</form> 
      <form name="supportRep"/> 
      <form name="supportRepCostPerHour">0.00</form> 
      <form name="createdTime">20 Jun 2017, 08:21:58</form> 
      <form name="updatedTime">20 Jun 2017, 08:23:10</form> 
      <form name="dueByTime"/> 
      <form name="isOverDue">false</form> 
      <form name="accountID"/> 
      <form name="account"/> 
      <form name="subject">Subject Name</form> 
     </request> 
    </requests> 
</result> 

到目前爲止,我創建了以下功能 - 輸出我從下面得到的是「1440」。它應該起作用,因爲當我替換count元素以回顯每個匹配時,輸出顯示了每個具有匹配狀態的故障單的狀態 - 只是計數元素看起來沒有按照需要運行。

function countPriority($status){ 
    $files = array("includes/xml-1.xml","includes/xml-2.xml","includes/xml-3.xml","includes/xml-4.xml","includes/xml-5.xml","includes/xml-6.xml","includes/xml-7.xml"); 
    $count = 0; 
    foreach ($files as $url) { 
     $xml = simplexml_load_file($url); 
     foreach ($xml->result->requests->request as $request){ 
      if ($request->form['3'] == $status){ 
       $count+= count($request); 
      } 
     } 
     return $count; 
    } 
} 

對於PHP /編碼,我是一個完全新手,所以任何建議或協助將不勝感激。

+4

移動'return'出來的'foreach' –

+0

感動 - 感謝您的幫助:) – user3235720

回答

1

看來你在這裏有一個錯誤:$count+= count($request);。如果您只是想計算具有特定狀態的票數,那麼您只需要將計數增加1,如$count++;。相反,您所做的是將$count的值增加$request中元素的數量。

另外,正如評論中指出的那樣,您應該將return語句從您的foreach循環中移出,否則您的方法只會循環訪問數組中的第一個文件。

那麼你的方法應該是這樣的:

function countPriority($status){ 
    $files = array("includes/xml-1.xml","includes/xml-2.xml","includes/xml-3.xml","includes/xml-4.xml","includes/xml-5.xml","includes/xml-6.xml","includes/xml-7.xml"); 
    $count = 0; 
    foreach ($files as $url) { 
     $xml = simplexml_load_file($url); 
     foreach ($xml->result->requests->request as $request){ 
      if ($request->form['3'] == $status){ 
       $count++; 
      } 
     } 
    } 
    return $count; 
} 
+0

感謝您的幫助! – user3235720