2014-10-31 75 views
0

嘿,這讓我頭疼。在遞歸函數中存儲的值和回顯值不同

我正在寫一個遞歸函數,它將通過一個文件目錄來創建一個xml站點地圖。

我所遇到的問題是,如果我回聲出它表明正是我想要的價值,但如果我把它存放(以寫,然後在最終的文件)的值是不同的。

function dirToArrayXML($dir, $langCode, $data) 
{ 
    $result = array(); 
    $cdir = scandir($dir); 
    $str = ""; 
    foreach ($cdir as $key => $value) 
    { 
     if (!in_array($value,array(".",".."))) 
     { 
      if (is_dir($dir . "/" . $value)) 
      { 
       $result[$value] = dirToArrayXML($dir . "/" . $value, $langCode, $data); 
      } 
      else 
      { 
       $result[] = $value; 
       if(endsWith($value, ".php")) 
       { 
        $page = substr($value, 0, -4); 
        $str .= " 
    <url> 
     <loc>http://www.example.com/".$dir."/".$page."</loc> 
     <changefreq>monthly</changefreq>"; 

     echo " 
     http://www.example.com/".$dir. "/".$page; 
        $languages2 = array("en","de","el","es","ru","tr"); 

        foreach($languages2 as $lang2) 
        { 
         $jazz = substr($dir, 3); 
         $filepath = $_SERVER['DOCUMENT_ROOT']."/".$lang2."/".$jazz."/".$page .".php"; 

         if($langCode != $lang2) 
         { 
          if(file_exists($filepath)) 
          { 
          echo " 
      http://www.formacompany.com/".$lang2."/".$jazz."/".$page; 
          $str.=" 
     <xhtml:link rel=\"alternate\" hreflang=\"".$lang2."\" href=\"http://www.example.com/".$lang2."/".$jazz."/".$page ."\"/>"; 
          } 
         } 
        } 
       $str.=" 
    </url>";  
      $data.=$str; 

       } 
      } 
     } 
    } 
    return $data; 
} 

文件中的輸出值是

<url> 
     <loc>http://www.example.com/ru/company-details</loc> 
     <changefreq>monthly</changefreq> 
     <xhtml:link rel="alternate" hreflang="en" href="http://www.example.com/en//company-details"/> 
     <xhtml:link rel="alternate" hreflang="de" href="http://www.example.com/de//company-details"/> 
     <xhtml:link rel="alternate" hreflang="es" href="http://www.example.com/es//company-details"/> 
    </url> 

儘管呼應值

http://www.example.com/ru/folder/company-details 
    http://www.example.com/en/folder/company-details 
    http://www.example.com/de/folder/company-details 
    http://www.example.com/ed/folder/company-details 

爲什麼不同的值?我如何獲得存儲的值以匹配回顯的內容?

+0

您可以直接把變量的引用的字符串讓生活自己更輕鬆並圍繞您的屬性使用單引號 - 例如'$ STR = 「」;' – 2014-10-31 18:36:02

回答

0

在你的代碼有這樣的:

$str .= " 
    <url> 
    <loc>http://www.example.com/".$dir."/".$page."</loc> 
    <changefreq>monthly</changefreq>"; 

echo "http://www.example.com/".$dir. "/".$page; 

在一些地方,您可以設置不同的事情的$str變量,而你echo出不同的字符串。

找到$str.=所有實例的地方設置標記,只是轉換它,所以它不僅包括你想要的字符串,即:

$str .= "http://www.example.com/".$dir. "/".$page; 
+0

其沒有解釋爲什麼$ DIR值是$海峽空,但在中迴應聲明的值 – Tristanisginger 2014-10-31 20:13:09