嘿伙计们,这让我头疼。
我正在编写一个递归函数,它将通过一个文件目录来创建一个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 :(得分: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;