0

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

我的代码:

<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

4

4 回答 4

3

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

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

放置你的 foreach 循环之后。$label所以它使用为and设置的最后一个值$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>";
}
于 2013-09-23T21:38:57.053 回答
1

您过早地关闭了 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>"
}
于 2013-09-23T21:39:49.250 回答
0

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

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

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

于 2013-09-23T21:42:28.457 回答
0

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

所以在 之后foreach,你会写:

print_r($value);

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

于 2013-09-23T22:27:36.857 回答