2012-07-14 107 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