php递归函数中存储的值和回显值不同

时间:2014-10-31 18:05:50

标签: php recursion echo

嘿伙计们,这让我头疼。

我正在编写一个递归函数,它将通过一个文件目录来创建一个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

为什么值不同?如何获取存储的值以匹配回显的内容?

1 个答案:

答案 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;