2011-07-14 17 views
1

私はAPIにクエリを行い、XML結果を取得しています。私はそれらの結果を取って、私は彼らの地位に基づいているテーブルにそれらを固執しようとしています。各列は異なる状態になるので、それぞれの列に入る必要があります。私が実行している問題は、複数のアイテムが同じステータスで返されている場合です。私はこれがループを破っていると信じています。私はまったく表示されていないいくつかのアイテムと重複しているアイテムを取得しています。どのように私は何を探していますか?ありがとう!!たとえば、XMLとforeachループ内のPHP変数

UPDATE:

<?xml version="1.0" encoding="UTF-8"?> 
<Assets total="6"> 
    <Asset> 
     <Attribute name="ID">B-1001</Attribute> 
     <Attribute name="Title">Some Bug #1</Attribute> 
     <Attribute name="Status">In Progress</Attribute> 
    </Asset> 
    <Asset> 
     <Attribute name="ID">B-1002</Attribute> 
     <Attribute name="Title">Some Bug #2</Attribute> 
     <Attribute name="Status">Code Review</Attribute> 
    </Asset> 
    <Asset> 
     <Attribute name="ID">B-1003</Attribute> 
     <Attribute name="Title">Some Bug #3</Attribute> 
     <Attribute name="Status">Code Review</Attribute> 
    </Asset> 
    <Asset> 
     <Attribute name="ID">B-1004</Attribute> 
     <Attribute name="Title">Some Bug #4</Attribute> 
     <Attribute name="Status">Ready for Development</Attribute> 
    </Asset> 
    <Asset> 
     <Attribute name="ID">B-1005</Attribute> 
     <Attribute name="Title">Some Bug #5</Attribute> 
     <Attribute name="Status">In Progress</Attribute> 
    </Asset> 
    <Asset> 
     <Attribute name="ID">B-1006</Attribute> 
     <Attribute name="Title">Some Bug #6</Attribute> 
     <Attribute name="Status">In Progress</Attribute> 
    </Asset> 


<?php 
foreach($xmlDefect as $assetDefect){ 
    // variables from defects XML 
    $defectId = $assetDefect->Attribute[0]; 
    $defectTitle = $assetDefect->Attribute[1]; 
    $defectStatus = $assetDefect->Attribute[2]; 
    if($defectStatus == "Gathering Requirements"){ 
     $defectGatheringReqs = "<div class='bugsItem'>" . $defectId . "</div>"; 
    }else if($defectStatus == "Ready for Development"){ 
     $defectReadyForDev = "<div class='bugsItem'>" . $defectId . "</div>"; 
    }else if($defectStatus == "In Progress"){ 
     $defectInProgress = "<div class='bugsItem'>" . $defectId . "</div>"; 
    }else if($defectStatus == "Code Review"){ 
     $defectAEReview = "<div class='bugsItem'>" . $defectId . "</div>"; 
    }else if($defectStatus == "Code Complete"){ 
     $defectCodeComplete = "<div class='bugsItem'>" . $defectId . "</div>"; 
    } 
} 
?> 
<table> 
    <tr> 
     <td> 
      Gathering Requirements 
     </td> 
     <td> 
      Ready for Development 
     </td> 
     <td> 
      In Progress 
     </td> 
     <td> 
      Code Review 
     </td> 
     <td> 
      Code Complete 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <?php echo $defectGatheringReqs; ?> 
     </td> 
     <td> 
      <?php echo $defectReadyForDev; ?> 
     </td> 
     <td> 
      <?php echo $defectInProgress; ?> 
     </td> 
     <td> 
      <?php echo $defectAEReview; ?> 
     </td> 
     <td> 
      <?php echo $defectCodeComplete; ?> 
     </td> 
    </tr> 
</table> 
+0

'$ xmlDefect'の内容の例を投稿できますか? –

+0

foreachループに終了タグがありません。 – jisaacstone

+0

基本的には、ループの始めに出力変数をリセットする必要があります。それ以外の場合は、最後のループ(反復)の値が残ります。 – hakre

答えて

0

OK私はこの問題は、=オペレータは、以前のすべての値をオーバーライドさだと思います。

ここでは2つの方法があります。まず、配列を使用して$somevar[] .= somevalueという構文を使用して、前の値を上書きするのではなく各値を配列に追加します。

2番目のオプションは、すべての変数を事前に宣言し、.=連結演算子を使用して、新しい文字列が前の文字列の末尾に追加されるようにすることです。ここで

は、私はおそらくあなたの状況にどうなるのかです:

<?php 
var $defectGatheringReqs = array(); 
var $defectReadyForDev = array(); 
. . .  
foreach($xmlDefect as $assetDefect){ 
. . .    
    switch($defectStatus) 
    { 
     case "Gathering Requirements"): 
      $defectGatheringReqs[] = $defectId; 
      break; 
     case "Ready for Development"): 
      $defectReadyForDev[] = $defectId; 
      break; 
    . . . 
    } 
?> 
<table> 
    <tr> 
     <td> 
      Gathering Requirements 
     </td> 
     <td> 
      Ready for Development 
. . . 
    </tr> 
    <tr> 
     <td> 
      <?php foreach($defectGatheringReqs as $id) { ?> 
       <div class='bugsItem'> 
        <?php echo $id; ?> 
       </div> 
      <?php } ?> 
     </td> 
. . . 
+0

私はこれも試してみましょう。私はすでにあなたの第二の選択肢を試して覚えているように見えます。 – RyanPitts

0

私は本当に助けのすべてに感謝します。私は私の問題と全く異なる解決策を見つけることになった。私は今、jQuery AJAXを、別のサーバ上のAPIを呼び出している私のサーバ上のPHPファイルに呼び出すようにしています(AJAX呼び出しは異なるドメイン間で行うことができないため、このようにしなければなりません) XMLが返されました。

次に、JavaScript/jQueryを使用してXMLを解析し、正しい列に追加しています。 jQueryを使用すると、追加部分がはるかに簡単になります。 :)

注:明らかにこの回答を2日間選択された回答としてマークすることはできませんが、それ以降はその回答を表示します。