我正在读取一个 xml 文件,该文件返回给我 xml 的 SimpleXMLElement 对象表示。我将获取一个数组并向该对象输入新值。我不知道我将在那个数组中成为什么。
如果我要蛮力这样做,我会做这样的事情。
//Solution 1: Brute Force
//Just creating an array and value for purposes of demonstration.
$arOfData = array( [0]=>"theFirstNode", [1]=>"theSecondNode",[2]=>"theThirdNode" );
$value = "The XML Node Value";
$simpleXml->$arOfData[0]->$arOfData[1]->$arOfData[2] = $value;
//The next best thing I can think of doing is something like this.
//Solution 2: Semi-brute force
//
foreach($this->arrayData as $key => $value) {
$xmlNodes = explode( '-', $key);
$numNodes = count($xmlNodes);
switch($numNodes) {
case 1:
$simpleXml->$xmlNodes[0] = $value;
break;
case 2:
$simpleXml->$xmlNodes[0]->$xmlNodes[1] = $value;
break;
case 3:
$simpleXml->$xmlNodes[0]->$xmlNodes[1]->$xmlNodes[2] = $value;
break;
case 4:
$simpleXml->$xmlNodes[0]->$xmlNodes[1]->$xmlNodes[2]->$xmlNodes[3] = $value;
break;
case 5:
$simpleXml->$xmlNodes[0]->$xmlNodes[1]->$xmlNodes[2]->$xmlNodes[3]->$xmlNodes[4] = $value;
break;
}
}
*note 此解决方案使用数组键并将其分解为由破折号分隔的数组,然后将数组值用作新的 xml 值。所以不要让它分散你的注意力。
解决方案#2 的问题是:当我们得到一个比 5 更深的 xml 节点时会发生什么?它不会被塞进我们正在创建的新对象中。哦哦。它也不是很优雅;)。我不确定如何以更递归的方式执行此操作。