2017-02-26 70 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