2012-07-14 84 views
0

我遇到以下代码的问题。变量$ entry永远不会变得大于1.我希望它增加以便能够取所有关键字并将它们放入单个变量中。我无法找到为什么$条目递增的原因。提前致谢! :-)SimpleXML中递增变量

function objectsIntoArray($arrObjData, $entry, $arrSkipIndices = array()) { 

`$arrData = array();` 
$kwords=array(); 

// if input is object, convert into array 

if (is_object($arrObjData)) { 

    $arrObjData = get_object_vars($arrObjData); 

} 

if (is_array($arrObjData)) { 


    foreach ($arrObjData as $index => $value) { 

    if ($index=="keywordterm"&&$index!="0"){ 
     $kword=$arrObjData[$index]; 
     //echo "arrObjData[$index]: ".$kword."</br></br>"; 
     $kwords[$entry]=$kword; 
     //echo "keywords: ".$kwords."</br></br>"; 
     //echo "keywords[$entry]: ".$kwords[$entry]."</br></br>"; 
     $entry++; 

    } 
     if (is_object($value) || is_array($value)) { 

      $value = objectsIntoArray($value, $entry, $arrSkipIndices); // recursive call 

     } 

     if (in_array($index, $arrSkipIndices)) { 
      continue; 
     } 

     $arrData[$index] = $value; 
     //echo "$arrData[$index]: ".$arrData[$index]."</br>"; 
    } 


} 

return $arrData; 
} 

`$entry=0; 

$xmlUrl = "9424.xml"; // XML feed file/URL 

$xmlStr = file_get_contents($xmlUrl); 

$xmlObj = simplexml_load_string($xmlStr); 

$arrXml = objectsIntoArray($xmlObj, $entry);` 

随着第一执行它表明: 关键字[0]:电信计算

随着第二它显示: 关键字[0]:多代理系统

您看到?这是0再次....

从XML小码:

<keywordset keywordtype="Inspec"> 
     <keyword> 
     <keywordterm><![CDATA[telecommunication computing]]></keywordterm> 
     </keyword> 
     <keyword> 
     <keywordterm><![CDATA[multi-agent systems]]></keywordterm> 
     </keyword> 
     <keyword> 
     <keywordterm><![CDATA[state estimation]]></keywordterm> 
     </keyword> 
     <keyword> 
     <keywordterm><![CDATA[control engineering computing]]></keywordterm> 
     </keyword> 
     <keyword> 
     <keywordterm><![CDATA[telecommunication control]]></keywordterm> 
     </keyword> 
    </keywordset> 

回答

1

林不完全知道你正试图在这里实现的目标,但有一两件事我注意到的是,你正试图改变这些参数没有提及一个物体。

变化

function objectsIntoArray($arrObjData, $entry, $arrSkipIndices = array()) { 

function objectsIntoArray(&$arrObjData, &$entry, $arrSkipIndices = array()) { 

它可能会,也可能不会帮助;但它的一些尝试。

我的意思示例...

function IncNumber($num) 
{ 
    $num++; 
} 

$num = 0; 
IncNumber($num); 
// $num will still be 0 



// Using & to declare a reference to the object 
function IncNumber2(&$num) 
{ 
    $num++; 
} 
IncNumber2($num); 
// $num will be 1 
+0

谢谢!它工作正常!我无法想象会造成这样的问题......你确切知道为什么?你说我试图改变参数而不参考对象。这就是为什么入口变量不会改变?再次感谢你!! – 2012-07-15 09:47:23

+0

@ApostolosKou,如果这有帮助,并且它是正确答案,您是否可以通过单击我答案旁边的打勾来标记为正确答案?如果您有任何进一步的问题,这对未来也有帮助,因为它会提高您的接受评级。很多谢谢 – craig1231 2012-07-15 10:18:12

+0

@ApostolosKou,如果你不指定一个&它会基本上复制对象,所以它从原始内存中取消分配。通过使用&,它直接引用对象,而不是复制它。 – craig1231 2012-07-15 10:20:22