我使用Laravel解析XML文件并将其存储到数据库中。现在,这可能是我无法指责的某种愚蠢的错误,但我真的很感激,如果有人能检查代码和我得到的奇怪结果。
XML有一个深层而复杂的结构,这里有一点点我的烦恼:
我最后倾销$ nizXMLsp以查看对象数组中的内容:
public function upload(){
$dom = new DomDocument();
$nizBaza = DB::table('offers')->orderBy('id', 'DESC')->first();
$nizXML = array();
$objekat = new stdClass();
$dom->load("storage/X_Lista.xml");
$domXpath = new DomXPath($dom);
$upit = $domXpath->query('//offer');
foreach($upit as $of){
$objekat->Time = $of->getAttribute('Time');
$objekat->Date = $of->getAttribute('Date');
$objekat->betRound = $of->getAttribute('betRound');
$objekat->timestamp = $of->getAttribute('timestamp');
array_push($nizXML, $objekat);
}
if(is_null($nizBaza) or $nizBaza->id != $nizXML[0]->betRound) {
$kolo = new Offer();
$kolo->id = $objekat->betRound;
$kolo->ts = $objekat->Date . " " . $objekat->Time;
$kolo->posix = $objekat->timestamp;
$kolo->save();
//
$nizBaza = DB::table('sportovi')->get();
$nizXMLsp = array(); $objekat_sp = new stdClass();
foreach($dom->getElementsByTagName('sport') as $k=>$v){
$objekat_sp->id = $v->getAttribute('id');
$objekat_sp->name = $v->getAttribute('name');
$objekat_sp->betRound = $v->parentNode->getAttribute('betRound');
$nizXMLsp[$k] = $objekat_sp;
}
}
elseif($nizBaza->id == $nizXML[0]->betRound){
echo 'break1';
exit;
}
else {
echo 'break2';
exit;
}
return var_dump($nizXMLsp);
}
现在,我最终看到的是:
而不是4个具有不同数据集的对象,我得到4个具有相同数据集的对象(所有数据都来自最后一个节点)。它可能是什么?
答案 0 :(得分:1)
可能是一个非常简单的调整。只需在循环中重置$objekat_sp
:
foreach($dom->getElementsByTagName('sport') as $k=>$v){
$objekat_sp = "";
$objekat_sp->id = $v->getAttribute('id');
$objekat_sp->name = $v->getAttribute('name');
$objekat_sp->betRound = $v->parentNode->getAttribute('betRound');
$nizXMLsp[$k] = $objekat_sp;
}
答案 1 :(得分:0)
移动
$objekat = new stdClass();
和
$objekat_sp = new stdClass();
里面各自的foreach循环。
现在你正在将相同的对象(在修改其属性之后)多次推送到数组中。