2014-02-27 80 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);