将数组转换为无序列表

5
我正在尝试将一些数组值映射到一个无序(
    )列表中。
        <?php
                $files = scandir($dir);
                //remove "." and ".."
                print_r($files);
        ?>
    
        <ul>
            <?php foreach($files as $file): ?>
                <li><?= $file ?></li>
            <?php endforeach; ?>
        </ul>
    

    它确实正确地遍历了数组,因为它为<li>元素提供了项目符号。但是,在这些项目符号旁边没有看到任何字符串输出。而且,当我使用print_r打印数组时,所有值都在那里。
    输出看起来像这样,有正确数量的项目符号,但旁边没有文本:

    .
    .
    .

    我在这里做错了什么?谢谢。

print_r($files); 的输出是什么?如果需要,可以进行匿名处理。 - Joe Frambach
1
如果 print_r($files); 的输出为 null,这意味着你的 $dir 变量存在问题。请检查代码的其他部分。可能是变量名写错了(例如可能是 $dirs),或者你可能忘记初始化它,或者之前可能发生了错误,只生成了一个警告。 - Lucas
2
我删除了"$dir"变量的值,因为它对答案不重要。输出结果类似于数组([2] => commander.Command1.php [3] => commander.Command2.php [4] => commander.helloCommand3.php) - Code Bunny
2
我目前还无法进行评分(声望不够)。感谢您的贡献。 - Code Bunny
1
没问题。随时准备帮忙。 - Lucas
2
你应该提出更有用的问题,这样你就能获得声望。 - Lucas
5个回答

6
function array2ul($array) {
    $out = "<ul>";
    foreach($array as $key => $elem){
        if(!is_array($elem)){
            $out .= "<li><span>" . $key . ": " . $elem . "</span></li>";
        } else {
            $out .= "<li><span>" . $key . "</span>" . array2ul($elem) . "</li>";
        }
    }
    $out .= "</ul>";
    return $out; 
}

这是一个很好的sprintf()候选项,可以清理连接;同样使用复合赋值($out .= "...";)。此外,混合使用带括号的块(if)和不带括号的块(else)是不好的做法。 - Dan Lugg

4
<?php foreach($files as $file): ?>
    <li><?php echo $file ?></li>
<?php endforeach; ?>

或者

<?php foreach($files as $file): ?>
    <li><? echo $file ?></li>
<?php endforeach; ?>

3
我不确定这个是否有效,但是可能会起作用。
<?php
  $files = scandir($dir);
  //remove "." and ".."
  print_r($files);
?>

<ul>
  <?php foreach($files as $file) { ?>
  <li><?php echo $file; ?></li>
  <?php } ?>
</ul>

这是我会使用的方法,如果不起作用,可能是因为您的$dir变量没有内容(存在错误)。您原始代码无法工作的一个原因可能是因为我认为<? ?>标签不兼容每个服务器。此外,据我所知,php中没有<?=$var ?>这样的东西。我认为它只存在于ASP之类的语言中。
编辑:针对您关于花括号劣势的问题,它们是PHP中通常被接受的标准。在C/C++/C#系列中可能会有所不同,我不知道。

1
此外,使用我的方法与花括号 '{ & }' 更容易,因为在大多数代码编辑器中,如Espresso、Coda、Smultron、jEdit、Notepad++等,它们都有一个括号检测系统,可以匹配括号。这个功能将允许您调试错误的程序。因此,您应该使用花括号。反正这样写代码更少,每次输入时都能节省一秒钟。 - Lucas
他们说在PHP中使用花括号是备选方案,应该避免使用。对我来说(来自C家族语言),使用花括号似乎是最自然的,你能解释一下为什么有些人不喜欢它吗? - Code Bunny
谁说的?我从来没有学过你用的那种方式。如果你不使用花括号,它会使错误检测变得困难,因为它们不能将代码分成部分。你用什么文本编辑器? - Lucas

2

<?= $file ?>替换为<?php echo $file ?>或通过php.ini启用您的sort标签;看起来您的服务器没有启用它。


1
今天使用了这个:


if ( !empty($files) ) echo '<li>' . implode('<li>', $files);

一种更加优雅的解决方案。谢谢。 - Code Bunny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接