2017-02-26 73 views
-4

什么是呼应了其中的值进行分组数组的最佳方式:回声阵列值连续存放的

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

如果我想要得到的结果是:

服务,2月27日,2017在08:00。

服务,2017年3月27日在08:00。

服务,2017年4月27日在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; 
     } 
    } 

?> 

输出:

服务,服务,服务,

8火星2017年,22个火星2017年,5 2017年4月,

08:00,08:00,08:00,

所以他们仍然是错误的顺序......我只是无法弄清楚如何对数组进行排序并将我想要的数据连续排列在一起。

排序数组函数不适用于此。有什么想法?

+1

这是怎么形成的阵列它可能在更容易从那里开始 – Mihai

+0

看看:http://stackoverflow.com/q/797251/3933332 – Rizier123

+0

...只要你在你的问题上收到如此多的降价这通常意味着你的问题非常糟糕。如果你没有努力为自己解决问题,人们会降低你的问题。在发布问题之前,总是研究在线手册和计算器答案。如果你想删除这个问题,那将是非常好的。 – mickmackusa

回答

0

将有许多方法来剥皮这只猫。

我一直在努力提供一个灵活的解决方案,如果/当你的字符串包含多于或少于3行的值

$string="Service, Service, Service, 8 mars, 2017, 22 mars, 2017, 5 april, 2017, 08:00, 08:00, 08:00"; 

$string=preg_replace('/(\d{1,2}\s\w+),(\s\d{4})/','$1$2',$string); 
/* "Service, Service, Service, 8 mars 2017, 22 mars 2017, 5 april 2017, 08:00, 08:00, 08:00" */ 

$array=explode(', ',$string); // divide at comma&space's 
/* array (
     0 => 'Service', 
     1 => 'Service', 
     2 => 'Service', 
     3 => '8 mars 2017', 
     4 => '22 mars 2017', 
     5 => '5 april 2017', 
     6 => '08:00', 
     7 => '08:00', 
     8 => '08:00' 
    ) */ 
$rows=3; // change this if your original string holds > or < 3 rows 
$array=array_chunk($array,$rows); // group elements into specified number of rows 
/* array (
     0 => array (
      0 => 'Service', 
      1 => 'Service', 
      2 => 'Service' 
     ), 
     1 => array (
      0 => '8 mars 2017', 
      1 => '22 mars 2017', 
      2 => '5 april 2017' 
     ), 
     2 => array (
      0 => '08:00', 
      1 => '08:00', 
      2 => '08:00' 
     ) 
    ) */ 

// loop indexes of each element in the first sub-array (group/chunk) 
foreach(array_keys($array[0]) as $key){ 
    // access each value in all sub-arrays with same key/index (column) 
    /* column 0 holds: 
      array (
       0 => 'Service', 
       1 => '8 mars 2017', 
       2 => '08:00' 
      ) */ 
    // then join them together using a space as glue 
    // and push into the final array 
    $result[]=implode(' ',array_column($array,$key)); 
} 

/* result holds: 
     array (
      0 => 'Service 8 mars 2017 08:00', 
      1 => 'Service 22 mars 2017 08:00', 
      2 => 'Service 5 april 2017 08:00' 
     ) 

任何人谁更喜欢紧凑的您(或其他人)可以简单的修改(和几乎不可读)函数调用,在这里你去:

function davids_WP_workaround($string,$rows){ 
    $array=array_chunk(explode(', ',preg_replace('/(\d{1,2}\s\w+),(\s\d{4})/','$1$2',$string)),$rows); // group 9 elements into sets of 3 elements 
    foreach(array_keys($array[0]) as $key){ 
     $result[]=implode(' ',array_column($array,$key)); 
    } 
    return $result; 
} 

$string="Service, Service, Service, 8 mars, 2017, 22 mars, 2017, 5 april, 2017, 08:00, 08:00, 08:00"; 

echo "<pre>"; 
var_export(davids_WP_workaround($string,3)); 
echo "</pre>"; 
+0

这个伎俩@mickmackusa,谢谢你花时间和帮助我! 现在缺少的所有东西都是对数组的计数,所以函数可以提供正确数量的行,但这不会成为问题:) – David