Переменные PHP внутри цикла foreach - PullRequest
1 голос
/ 15 июля 2011

Я запрашиваю API и возвращаю результаты XML.Я пытаюсь взять эти результаты и положить их в таблицу, которая у меня есть на основе их статуса.Каждый столбец имеет другой статус, поэтому они должны идти в соответствующих столбцах.Проблема, с которой я сталкиваюсь, состоит в том, когда у меня есть несколько элементов, которые возвращаются с одинаковым статусом.Я считаю, что это разрывает петлю.Я получаю некоторые элементы, которые вообще не отображаются, а некоторые дублируются.Любые мысли, как я могу достичь того, что я ищу?Спасибо !!

ОБНОВЛЕНИЕ с примером xml:

<?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>

Ответы [ 2 ]

0 голосов
/ 15 июля 2011

Я действительно ценю всю помощь. Я закончил тем, что нашел совершенно другое решение моей проблемы. Сейчас я делаю вызов jQuery AJAX в файл PHP на моем сервере, который обращается к API на другом сервере (пришлось сделать это таким образом, потому что вызовы AJAX не могут быть сделаны в разных доменах), который получает XML вернулся.

Затем я просто использую JavaScript / jQuery для анализа XML и добавления его в правильные столбцы. jQuery делает добавление более простым! :)

ПРИМЕЧАНИЕ: не может пометить этот ответ как выбранный ответ в течение 2 дней, но будет делать это после этого.

0 голосов
/ 15 июля 2011

ОК. Я думаю, проблема в том, что оператор = переопределяет все предыдущие значения.

У вас есть два варианта: во-первых, использовать массив и использовать синтаксис $somevar[] .= somevalue, чтобы каждое значение добавлялось в массив, а не переопределяло предыдущее значение.

Второй вариант - объявить все переменные заранее, а затем использовать оператор конкатенации .=, чтобы новая строка добавлялась в конец предыдущей строки.

Вот что я, вероятно, сделал бы в вашей ситуации:

<?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>
 . . . 
...