前面的道歉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());
}
答案 0 :(得分:1)
提问者在" pac"时需要节点值的总和。 > = 2次出现并添加/增加到" $ finalObject-> pac",如下所示:
switch($parametername) {
//....
case "pac":
$finalObject->pac = (float)$finalObject->pac + (float)$logItem->Mean;
break;
}