提取每个块的子数组并转换为字符串

时间:2014-08-05 14:21:55

标签: php arrays string

我的代码如下:

$text = "john1,steven2,lex66,e1esa2,444e3, and so forth[...]"; // up to about 180 entries
$arrayChunk = array_chunk(explode(',', $text), 39); // which leaves me with 5 chunks

foreach ($arrayChunk as $key => $value) {
    if (is_array($value)) {
        foreach ($value as $subkey => $subvalue) {
            $string = $subvalue;
        }
        echo $string; // echo all the subvalues (but only echos the first)
    }
}

所以,我最终得到了5个块,我需要foreach来回显这个数组的所有子值:

john1,steven2,[...]
doe4,joe7,[...]
svend2,ole5[...]
olga7,jan3[...]
leila9,aija9[...]

而不仅仅是

john1
doe4
svend2
olga7
leila9

3 个答案:

答案 0 :(得分:1)

您正在使用:

 $string = $subvalue;

然后只输出一个。如果你想回显所有,请使用implode:

 foreach ($arrayChunk as $key => $value)
    {
            if (is_array($value))
            {
                 echo implode(', ', $value) . "<br>";
            }
    }

答案 1 :(得分:0)

  1. 添加echo implode(', ', $value);
  2. 为换行添加echo "<br>";

    foreach ($arrayChunk as $key => $value)
            {
                    if (is_array($value))
                    {
    
                         echo implode(', ', $value);
                         echo "<br>";
                    }
            }
    

答案 2 :(得分:0)

我建议使用更直接的正则表达式方法,而不是explode()array_chunk()foreach()is_array()implode()

我的方法在第39个逗号上拆分你的字符串 - 没有额外的处理,简单。

代码:(Demo

$text="a,b,c,d,e,f,g,h,i,10,a,b,c,d,e,f,g,h,i,20,a,b,c,d,e,f,g,h,i,30,a,b,c,d,e,f,g,h,i,40,a,b,c,d,e,f,g,h,i,50";
$groups=preg_split('/(?:[^,]+\K,){39}/',$text);
foreach($groups as $group){
    echo "$group\n";
}

输出:

a,b,c,d,e,f,g,h,i,10,a,b,c,d,e,f,g,h,i,20,a,b,c,d,e,f,g,h,i,30,a,b,c,d,e,f,g,h,i
40,a,b,c,d,e,f,g,h,i,50

该模式将匹配值后跟逗号39次,并在尾随逗号上重新启动全字符串匹配(使用\K) - 此重启意味着任何字符串都不会有逗号。在$groups

这是Pattern Demo