PHP foreach循环读取文件,创建数组和打印文件名

时间:2012-08-05 00:58:09

标签: php foreach file-get-contents

有人可以帮我这个吗?

我有一个包含一些文件的文件夹(没有扩展名)

/模块/邮件/模板

使用这些文件:

  • 测试
  • TEST2

我想首先循环并读取文件名(test和test2)并将它们打印到我的html表单作为下拉项。这是有效的(其余形式的html标签在上面和下面的代码下面,在这里省略)。

但我还想阅读每个文件内容并将内容分配给var $内容并将其放在我稍后可以使用的数组中。

这就是我试图实现这一目标的方法,但没有运气:

    foreach (glob("module/mail/templates/*") as $templateName)
        {
            $i++;
            $content = file_get_contents($templateName, r); // This is not working
            echo "<p>" . $content . "</p>"; // this is not working
            $tpl = str_replace('module/mail/templates/', '', $templatName);
            $tplarray = array($tpl => $content); // not working
            echo "<option id=\"".$i."\">". $tpl . "</option>";
            print_r($tplarray);//not working
        }

2 个答案:

答案 0 :(得分:1)

在循环外部初始化数组。然后在循环内分配它的值。在你不在循环之前,不要尝试打印数组。

r调用中的file_get_contents错误。拿出来。 file_get_contents的第二个参数是可选的,如果使用它应该是一个布尔值。

如果尝试读取文件时出错,请检查file_get_contents()是否未返回FALSE

您有一个拼写错误,指的是$templatName而不是$templateName

$tplarray = array();
foreach (glob("module/mail/templates/*") as $templateName) {
        $i++;
        $content = file_get_contents($templateName); 
        if ($content !== FALSE) {
            echo "<p>" . $content . "</p>";
        } else {
            trigger_error("file_get_contents() failed for file $templateName");
        } 
        $tpl = str_replace('module/mail/templates/', '', $templateName);
        $tplarray[$tpl] = $content; 
        echo "<option id=\"".$i."\">". $tpl . "</option>";
}
print_r($tplarray);

答案 1 :(得分:1)

此代码对我有用:

<?php
$tplarray = array();
$i = 0;
echo '<select>';
foreach(glob('module/mail/templates/*') as $templateName) {
    $content = file_get_contents($templateName); 
    if ($content !== false) {
        $tpl = str_replace('module/mail/templates/', '', $templateName);
        $tplarray[$tpl] = $content; 
        echo "<option id=\"$i\">$tpl</option>" . PHP_EOL;
    } else {
        trigger_error("Cannot read $templateName");
    } 
    $i++;
}
echo '</select>';
print_r($tplarray);
?>