PHP XML重复节点需要帮助总结foreach循环的值

时间:2014-05-28 18:27:35

标签: php xml foreach

前面的道歉PHP不是我的本机编程语言。

我有一个正在使用XML对象并通过它旋转并设置值以便更新表的文件。

文件已更改,现在有两个名称相同的节点' pac'。

我有一个foreach循环,它将值设置为最终的对象变量。我需要在其中添加另一个foreach循环(或者我可能不会让PHP人知道更好的方法来处理XML中的欺骗节点上的实际总和)。

PHP代码:

function parseSingleLineFile($singleFilePath,$bundlename)
{   
    $xmlobject = simplexml_load_file($singleFilePath);
    $finalObject;
    $finalObject->timestamp = $xmlobject->Info->Created;

    global $LAST_TIMESTAMP;
    if($finalObject->timestamp != 0) $LAST_TIMESTAMP = $finalObject->timestamp;

    foreach($xmlobject->MeanPublic as $logItem)
    {
        $psplit = split(":",$logItem->Key);
        $parametername = strtolower($psplit[sizeof($psplit)-1]);

        switch($parametername)
        {
            case "exlbnmb":
                $finalObject->exlsolirr = $logItem->Mean;
                break;
            case "solacp":
                $finalObject->intsolirr = $logItem->Mean;
                break;
            case "smaa":
                $finalObject->sma_h_on = $logItem->Mean;
                break;
            case "pac": /* here is the problem spot (there are now two of these...*/
                $finalObject->pac = $logItem->Mean;
                break;
        }
    }
}

我需要添加两个平均值并设置为finalObject pac键变量:

这是我最好的尝试,但我无法在生产中测试它,我无法在产品系统之外重新创建它,所以我不确定我是否正确。在文件工作的这一点上,我不想冒这个风险。

我最好的猜测是获得每个节点的平均值:

case "pac":
$pacbuilder ='0';
foreach($parametername = pac) {
    $pacbuilder += $logItem->Mean;
}
$finalObject->pac = $pacbuilder;
break;      

我还想注意它正在抓取最后一个pac值并跳过第一个实例/节点。

finalObject用于填充表格...

if($totalRows_checkForLine == 0)
{
    $query_insertLine = sprintf("INSERT INTO mean_data_table SET 
                                d_exlsolirr = '%s',
                                d_intsolirr = '%s',
                                d_sma_h_on = '%s',
                                d_pac = '%s'
                                ", 
                                $finalObject->exlsolirr,
                                $finalObject->intsolirr,
                                $finalObject->sma_h_on,
                                $finalObject->pac);
    $insertLine = mysql_query($query_insertLine) or die(mysql_error()); 
}

1 个答案:

答案 0 :(得分:1)

提问者在" pac"时需要节点值的总和。 > = 2次出现并添加/增加到" $ finalObject-> pac",如下所示:

switch($parametername) {
   //....
    case "pac":        
        $finalObject->pac = (float)$finalObject->pac + (float)$logItem->Mean;
        break;
}