【问题标题】:How to stop loop string inside PHP loop with array如何使用数组在 PHP 循环中停止循环字符串
【发布时间】:2019-01-07 21:31:25
【问题描述】:

我正在尝试在下面的 for 循环中停止 $implode_demographics

例如,如果我在循环中使用echo $implode_demographics,那么我会得到:

a01a01,a02a01,a02,a03a01,a02,a03,a04a01,a02,a03,a04,a05a01,a02,a03,a04,a05,a06a01,a02,a03,a04,a05,a06,a07a01,a02,a03,a04,a05,a06,a07,a08a01,a02,a03,a04,a05,a06,a07,a08,a09a01,a02,a03,a04,a05,a06,a07,a08,a09,a10a01,a02,a03,a04,a05,a06,a07,a08,a09,a10,a11a01,a02,a03,a04,a05,a06,a07,a08,a09,a10,a11,b01a01,a02,a03,a04,a05,a06,a07,a08,a09,a10,a11,b01,b02a01,a02,a....

但是如果我在外面使用这个字符串,那么输出就可以了。

a01,a02,a03,a04,a05,a06,a07,a08,a09,a10,a11,b01,b02,b03,c01,c02,c03,c04,c05,c06,c07,c08,c09,c10,c11,c12,c13

Online PHP test

那么,我如何在 for 循环中 echo $implode_demographics 获得相同的结果?

$a_l_demographics = [11,3,13];
$a_p_demographics  = ['a','b','c'];
$a_r_demographics = [];
$c_demographics_values = array();
$a_c_demographics = min(count($a_l_demographics), count($a_p_demographics));

for ($i = 0; $i < $a_c_demographics; $i++) {
    for ($j = 1; $j <= $a_l_demographics[$i]; $j++) {
        $a_r_demographics[] = $a_p_demographics[$i] . str_pad($j, 2, 0, STR_PAD_LEFT);

        $implode_demographics = implode($a_r_demographics, ',');
        // this won't work
        echo $implode_demographics;
    }
}

// this works
// echo $implode_demographics;

【问题讨论】:

  • 这个循环设计得不是很好,很难理解。请向我们提供更多关于什么不工作和预期输出的信息。

标签: php arrays string for-loop


【解决方案1】:

它不起作用,因为您在向其中添加数据后一次又一次地对同一个数组进行内爆。

因此,在您的第一个 echo 中,您只有 a01,然后您使用 a01a02 值等发生内爆。

尝试添加echo $implode_demographics . "\n";,你会看到你有一个var,然后是两个,然后是三个,等等。看这里的例子:https://3v4l.org/WrCgJ

因此,如果您想 echo INSIDE 中的每个值,只需执行以下操作:

<?php

$a_l_demographics = [11,3,13];
$a_p_demographics  = ['a','b','c'];
$a_r_demographics = [];
$c_demographics_values = array();
$a_c_demographics = min(count($a_l_demographics), count($a_p_demographics));

for ($i = 0; $i < $a_c_demographics; $i++) {
    for ($j = 1; $j <= $a_l_demographics[$i]; $j++) {
        $a_r_demographics[] = $a_p_demographics[$i] . str_pad($j, 2, 0, STR_PAD_LEFT);

        $implode_demographics = implode($a_r_demographics, ',');

        // You echo only the last value
        echo $a_p_demographics[$i] . str_pad($j, 2, 0, STR_PAD_LEFT);

        // If it's not the last loop : you add a `,`
        if (!($i == ($a_c_demographics - 1) && $j == $a_l_demographics[$i]))
            echo ",";
    }
}

这样你每次echo 只会是最后一个值,而不是每次从头开始的所有值,输出是:

a01,a02,a03,a04,a05,a06,a07,a08,a09,a10,a11,b01,b02,b03,c01,c02,c03,c04,c05,c06,c07,c08,c09,c10,c11,c12,c13

在此处查看代码:https://3v4l.org/MEnGe

【讨论】:

  • @IncredibleHat 你是对的,我改变我的代码谢谢!
【解决方案2】:

事实上它的工作,你有一个内爆的问题。内爆不要把胶水(,)放在最后一个值! 试试这个。

$implode_demographics = implode($a_r_demographics, ',');
echo $implode_demographics.', ';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 2012-06-19
    • 2022-01-11
    • 2016-03-14
    • 1970-01-01
    • 2012-05-20
    • 2013-05-31
    相关资源
    最近更新 更多