【问题标题】:Echo every variable in an array回显数组中的每个变量
【发布时间】:2013-09-23 21:36:34
【问题描述】:

我正在尝试从数组中的每个变量中删除空格并将其替换为“-”。但是我只得到数组的最后一个变量。

我的代码:

<ul class="gap-items">
<?php 
    while ($query->have_posts()): 
        $query->the_post(); 
        $post_type = get_post_type( get_the_ID() );   

        $key = 'field_5208f1f811702';
        $value = get_field($key);

        var_dump($value);

        foreach ($value as $label) {
            $label = strtolower($label);

            $label = preg_replace("/[^a-z0-9_\s-]/", "", $label);

            //Clean up multiple dashes or whitespaces
            $label = preg_replace("/[\s-]+/", " ", $label);

            //Convert whitespaces and underscore to dash
            $label = preg_replace("/[\s_]/", "-", $label);

            var_dump($label);
        }
?>
        <!-- Loop posts -->     
        <li class="item <?php echo $post_type ?> <?php echo $label ?>" id="<?php the_ID(); ?>" data-permalink="<?php the_permalink(); ?>">

所以$value 是一个数组。对于每个变量,我将删除空格并用破折号替换它。我需要在 foreach 函数之外回显每个变量。我还尝试先将变量内爆,但没有结果。这该怎么做?谢谢!

编辑: 第一个 var_dump($value); 给了我一个数组,如: array(2) { [0]=> string(8) "Option 3" [1]=> string(8) "Option 4" }

var_dump($label) 给出: string(8) "option-3" string(8) "option-4"

我只想回应这个:option-3 option-4

【问题讨论】:

  • 为什么不能把
  • 标签放在 foreach 中? (用 end-php 和 start-php 标签包装它)。
  • 我在您的新编辑中注意到的一件事是您使用替代语法 (while ():) 而不是使用标准语法,我在您的使其不完整的代码示例。但是你在while循环中使用foreach,这是一个正确的假设吗?此外,在此处发布时,请尝试整齐地格式化您的代码,这可以帮助您发现问题,并有助于我们跟进您正在做的事情。
  • 除上述之外,由于这不是一个完整的sn-p,您能否制作一个可执行的小sn-p,我们可以测试并更好地描述您的结果是什么样的'喜欢吗?就目前而言,我无法运行您的代码并因此查看您的结果,这让我更难以尝试找出您的错误可能在哪里。
  • 标签: php arrays variables foreach echo


    【解决方案1】:

    你只得到最后一个,因为你的回声线:

    <li class="item <?php echo $post_type ?> <?php echo $label ?>"></li>
    

    放置在 您的 foreach 循环之后。所以它使用为$label$post_type 设置的最后一个值。尝试将它放在你的循环中,这样每次循环遍历列表时都会生成回声。

    你应该得到如下结果:

    $value = get_field($key);
    
    foreach ($value as $label) {
        $label = strtolower($label);
    
        $label = preg_replace("/[^a-z0-9_\s-]/", "", $label);
    
        //Clean up multiple dashes or whitespaces
        $label = preg_replace("/[\s-]+/", " ", $label);
    
        //Convert whitespaces and underscore to dash
        $label = preg_replace("/[\s_]/", "-", $label);
    
    
        echo "<li class=\"item $post_type $label\"></li>";
    }
    

    【讨论】:

    • 谢谢。这可能确实有效。但是如果你想把它放在循环之外呢?我这可能吗?
    • 如果您为数组中的每个项目打印li,您永远不想将其放在循环之外。否则,您将永远不会得到所有值的回显。总是需要某种循环来显示未知数量的项目。
    • 感谢您的帮助。我仍然没有得到我想要的。也许是因为列表是由 while 函数生成的(请参阅我的问题中的编辑)。
    • 进一步补充我在上面发布的关于您的原始问题(作为 cmets)的内容,现在我对您在做什么有了更多的了解。当您在输出中使用在 foreach 中生成的变量时,您仍然需要在 foreach 的每次迭代中输出
    • 。如果您每次迭代只需要一 (1) 个
    • ,那么您当前的格式完全符合您的预期
    【解决方案2】:

    你过早地关闭了 foreach 循环:

    $value = get_field($key);
    
    foreach ($value as $label) {
    $label = strtolower($label);
    
    $label = preg_replace("/[^a-z0-9_\s-]/", "", $label);
    
    //Clean up multiple dashes or whitespaces
    $label = preg_replace("/[\s-]+/", " ", $label);
    
    //Convert whitespaces and underscore to dash
    $label = preg_replace("/[\s_]/", "-", $label);
    
    
    echo "<li class='item $post_type $label'></li>"
    }
    

    【讨论】:

    • 如果我错了请告诉我,但我不认为变量是插在单引号字符串中的。我不是 PHP 专家,但我知道有几种语言使用相同的结构。
    • 我通常不会真正关心使用'或"(以防我复制了旧的 html 至极使用"),它从未与我决裂。但我可能错了
    • 它似乎不起作用,here's the test at phpFiddle.org。将来要记住的事情。
    • 感谢izuriel,我自己写的时候总是在html中使用',如果是别人写的,我只是懒得重写或\"。
    • 进一步补充我在上面发布的关于您的原始问题(作为 cmets)的内容,现在我对您在做什么有了更多的了解。当您在输出中使用在foreach 中生成的变量时,您仍然需要在foreach 的任何迭代中输出&lt;li&gt;。如果您每次迭代只需要一 (1) 个&lt;li&gt;,那么您当前的格式完全符合您的预期。
    【解决方案3】:

    使用 str_replace 函数,它接受一个字符串并替换所有出现的地方。

    str_replace(' ','-',$label)
    

    http://php.net/manual/en/function.str-replace.php

    【讨论】:

      【解决方案4】:

      您可以使用print_r()。这将使用键和值打印整个数组。

      所以在foreach之后,你会写:

      print_r($value);

      http://php.net/manual/en/function.print-r.php

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签