解析逗号分开的字符串,将数组分成块,然后转置



呼应值分组的数组的最佳方法是什么:

Array (
[0] => Service, Service, Service
[1] => 27 february, 2017, 27 march, 2017, 27 april, 2017
[2] => 08:00, 08:00, 08:00
)

如果我希望结果为:

Service, 27 february, 2017 at 08:00.
Service, 27 march, 2017 at 08:00.
Service, 27 april, 2017 at 08:00.

这是我到目前为止提出的:

<?php
$string = "Service, Service, Service, 8 mars, 2017, 22 mars, 2017, 5 april, 2017, 08:00, 08:00, 08:00";
$pattern = '/(d+) (w+), (d+)/i'; //remove comma before year
$replacement = '${1} $2 $3';
$fixed = preg_replace($pattern, $replacement, $string);
 
$array = explode(', ', $fixed); 
$i=0;
foreach($array as $value) {
    echo $value.", ";
    $i++;
    if ($i == 3) {
        echo '<br>';
        $i = 0;
    }
}    
?>

输出:

Service, Service, Service, 
8 mars 2017, 22 mars 2017, 5 april 2017, 
08:00, 08:00, 08:00, 

这样,它们仍然处于错误的顺序...我只是无法弄清楚如何对数组进行排序并分组我想要的值,而不是在行中。

只要知道行的数量,就只有:

  1. 将字符串拆分在逗号空间上的正则是,该逗号的位置立即遵循一个或单位的数字或单词,从大写字母开始,
  2. array_chunk()
  3. 的呼吁
  4. array_map()(带有空回调和数据扩展)至"转置"数据。

代码:(演示)

$string = "Service, Service, Service, 8 mars, 2017, 22 mars, 2017, 5 april, 2017, 08:00, 08:00, 08:00";
$rows = 3;
var_export(
    array_map(
        null,
        ...array_chunk(
            preg_split('/(?:[A-Z][a-z]+|d+)K, /', $string),
            $rows
        )
    )
);

最新更新