呼应值分组的数组的最佳方法是什么:
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,
这样,它们仍然处于错误的顺序...我只是无法弄清楚如何对数组进行排序并分组我想要的值,而不是在行中。
只要知道行的数量,就只有:
- 将字符串拆分在逗号空间上的正则是,该逗号的位置立即遵循一个或单位的数字或单词,从大写字母开始,
-
array_chunk()
和
的呼吁 -
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
)
)
);