2014-02-27 113 views
1

我想我的爆炸陣列看起來像這樣:PHP爆炸陣列陣列具有四個細胞

[0] => Array 
    (
     [0] => 14 // this is hours 
     [1] => 38 // this is minutes 
     [2] => 14 // this is hours again 
     [3] => 59 // this is minutes again 
) 
[1] => Array 
    (
     [0] => 15 // this is hours 
     [1] => 10 // this is minutes 
     [2] => 16 // this is hours again 
     [3] => 40 // this is minutes again 
) 
    . 
    . 
    . 
[200] => Array 
    (
     [0] => 13 // this is hours 
     [1] => 35 // this is minutes 
     [2] => 23 // this is hours again 
     [3] => 32 // this is minutes again 
) 

這個,因爲我將在未來這些時間進行比較。

我有這樣的時間的列表:

15:48,16:10 12:01,12:19 13:06,13:28 10:45,11:02

,現在我明白了一個數組,它看起來像這樣的:

[0] => 16:10,16:36 
[1] => 13:06,13:17 
. 
. 
. 
[200] => 14:38,14:59 

我曾嘗試迄今

$length = count($timesArr); 
    for($i=0; $i < $length; $i++){ 
     foreach (explode(',', $timesArr[$i]) as $piece) { 


      $timesArray[] = explode(':', $piece); 
     } 
    } 

和因爲結果輸出是這樣的,這是相當接近:

[0] => Array 
    (
     [0] => 14 
     [1] => 38 
    ) 

    [1] => Array 
    (
     [0] => 14 
     [1] => 59 
    ) 

所以再次主要問題是,我所需要的細胞在0和1的上方作爲認爲是在同一小區

我也可以直接從字符串去,所以我會爆炸字符串。

+0

你可以使用'preg_replace_callback()'來處理它的正則表達式 – Martijn

回答

0

這是另一種解決方案

$times = array("16:10,16:36", '13:06,13:17'); 
$startendtimes = array(); 
foreach($times as $time){ 
    list($start,$end) = explode(',',$time); 
    list($starthour,$startmin) = explode(':',$start); 
    list($endhour,$endmin) = explode(':',$end); 
    $startendtimes[] = array($starthour,$startmin,$endhour,$endmin); 

} 
var_dump($startendtimes); 
/* Outputs 
array (size=2) 
    0 => 
    array (size=4) 
     0 => string '16' (length=2) 
     1 => string '10' (length=2) 
     2 => string '16' (length=2) 
     3 => string '36' (length=2) 
    1 => 
    array (size=4) 
     0 => string '13' (length=2) 
     1 => string '06' (length=2) 
     2 => string '13' (length=2) 
     3 => string '17' (length=2) 
*/ 
2

你幾乎擁有它。你當前位置最簡單的解決方案是使用array_merge。

http://uk1.php.net/array_merge

如果在頭兩個傳(0和1),它將它們組合成一個單一的陣列。

+0

另一種可能性是改變字符串如何存儲在第一個數組中。例如,如果您要將所有冒號替換爲逗號,然後將它們存儲在$ times []中,那麼您只需要執行一個爆炸()並且不需要array_merge。這當然假設在這個特定的項目中修改存儲在$ times []中的值是可以接受的。 – nick

+0

嗯,我猜數組合並不足以解決這個問題,因爲這些數組的數量會根據用戶文件的輸入而改變。無論如何感謝您的快速答案! :) – Bloof

+0

它有什麼問題?你可以傳入多個數組。它不一定是兩個。 –

0

preg_split()應足以
這工作 -

$timesArr = Array(
    "16:10,16:36", 
    "13:06,13:17", 
    "14:38,14:59" 
); 
foreach($timesArr as $time){ 
    $res[] = preg_split("/[\,\:]/",$time); 
} 
var_dump($res); 
/* 
array 
    0 => 
    array 
     0 => string '16' (length=2) 
     1 => string '10' (length=2) 
     2 => string '16' (length=2) 
     3 => string '36' (length=2) 
    1 => 
    array 
     0 => string '13' (length=2) 
     1 => string '06' (length=2) 
     2 => string '13' (length=2) 
     3 => string '17' (length=2) 
    2 => 
    array 
     0 => string '14' (length=2) 
     1 => string '38' (length=2) 
     2 => string '14' (length=2) 
     3 => string '59' (length=2) 
*/ 
1

preg_split('/[,:]/', $string)應在兩個分開的時間字符串:和,

0

這很容易,但preg_split()很酷:

$string = '15:48,16:10 12:01,12:19 13:06,13:28 10:45,11:02'; 

$array = array_chunk(explode(':', str_replace(array(',',' '), ':', $string)), 4); 

print_r($array);