【问题标题】:Array to an unordered list数组到无序列表
【发布时间】:2012-04-26 11:00:27
【问题描述】:

我正在尝试将一些数组值映射到无序 () 列表。

    <?php
            $files = scandir($dir);
            //remove "." and ".."
            print_r($files);
    ?>

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

它确实会正确地遍历数组,因为它会为 &lt;li&gt; 元素提供项目符号。但是,在这些项目符号旁边没有看到字符串输出。此外,当我 print_r 数组时,值就在那里。

输出看起来像这样,带有正确数量的项目符号,但它们旁边没有文本:

.
.
.

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

【问题讨论】:

  • 如果print_r($files); 的输出为null,则表示您的$dir 变量有问题。因此,请检查代码的其他部分。您可能为变量编写了错误的名称(例如,可能是 $dirs),或者您可能忘记初始化它,或者您可能事先遇到了错误,这只会产生警告。
  • 我删除了“$dir”变量的值,因为它对答案并不重要。输出类似于 Array ( [2] => commands.Command1.php [3] => command.Command2.php [4] => commands.helloCommand3.php )
  • 我还不能给予评价(声望不够)。感谢您的贡献。
  • 不用担心。随时准备提供帮助。
  • 你应该问更多有用的问题。然后你得到声望。

标签: php html arrays


【解决方案1】:
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) 混合使用也很糟糕。
【解决方案2】:
<?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 变量不包含任何内容(有错误)。您的原始代码可能无法正常工作的一个原因是,我认为 &lt;? ?&gt; 标记并非在每台服务器上都兼容。另外,据我所知,php 中没有 &lt;?=$var ?&gt; 的东西。我以为它只存在于ASP之类的。

    编辑:在回答您关于花括号的劣势的问题时,它们是 PHP 中普遍接受的标准。这在 C/C++/C# 系列中可能有所不同,我不知道。

    【讨论】:

    • 另外,使用我的方法和大括号 '{ & }' 更容易,因为在大多数代码编辑器中,如 Espresso、Coda、Smultron、jEdit、Notepad++ 等,它们都有一个括号检测系统, 将括号配对。此功能将允许您调试错误的程序。因此,您应该使用花括号。无论如何,它的代码更少。每次键入时节省一秒钟。
    • 他们说在 PHP 中使用花括号是另一种方式,应该避免。对我(来自 C 家族语言)来说,使用它们似乎是最自然的,你能解释为什么它会被一些人不赞成吗?
    • 谁说的?我从来没有学会使用你使用的方式。当您不使用花括号时,它确实使错误检测变得困难,因为它们不会将您的代码分成多个部分。你用什么文本编辑器?
    【解决方案4】:

    &lt;?= $file ?&gt; 替换为 &lt;?php echo $file ?&gt; 或通过 php.ini 启用您的排序标签;您的服务器似乎没有启用它。

    【讨论】:

      【解决方案5】:

      今天用这个:

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

      【讨论】:

      • 更优雅的解决方案。谢谢。
      猜你喜欢
      • 2017-10-31
      • 2014-09-12
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 2015-01-08
      相关资源
      最近更新 更多