首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用数组在PHP循环内停止循环字符串

如何使用数组在PHP循环内停止循环字符串
EN

Stack Overflow用户
提问于 2018-07-31 21:08:54
回答 2查看 56关注 0票数 0

我正在尝试阻止下面的$implode_demographics inside for循环。

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

代码语言:javascript
复制
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....

但是如果我在外部使用这个字符串,那么输出就能正常工作。

代码语言:javascript
复制
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

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

代码语言:javascript
复制
$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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-31 21:18:50

它不起作用,因为在向其中添加数据后,您会一次又一次地内爆相同的数组。

所以在你的第一个echo中,你只有a01,然后你使用a01a02值,等等。

尝试添加echo $implode_demographics . "\n";,您将看到您有一个var,然后是两个,然后是三个,等等。请参阅此处的示例:https://3v4l.org/WrCgJ

所以,如果你想要echo里面的每个值,只需这样做:

代码语言:javascript
复制
<?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最后一个值,而不是每次从头开始的所有值,输出是:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2018-07-31 21:24:03

事实上,这是工作,你有一个关于内爆的问题。内爆d‘’ont把胶水(,)的最后一个值!尝尝这个。

代码语言:javascript
复制
$implode_demographics = implode($a_r_demographics, ',');
echo $implode_demographics.', ';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51614172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档