PHP将数组分解为包含四个单元格的数组

PHP将数组分解为包含四个单元格的数组,php,arrays,multidimensional-array,explode,Php,Arrays,Multidimensional Array,Explode,我正在尝试将我的阵列分解为如下所示: [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

我正在尝试将我的阵列分解为如下所示:

[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
  )
[0] => 16:10,16:36
[1] => 13:06,13:17
.
.
.
[200] => 14:38,14:59
这是因为我将来会比较这些时间

我有这样的时间列表:

[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
  )
[0] => 16:10,16:36
[1] => 13:06,13:17
.
.
.
[200] => 14:38,14:59
15:48,16:10 12:01,12:19 13:06,13:28 10:45,11:02

现在我把它放在一个数组中,看起来像这样:

[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
  )
[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和1位于同一单元格中


我也可以直接从弦开始,这样我就可以爆炸弦了。

你几乎就拥有了它。从您目前的位置来看,最简单的解决方案是使用array\u merge

如果传入前两个(0和1),它将把它们组合成一个数组。

preg\u 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)
*/

preg_split('/[,:]/',$string)
应该在两个位置拆分时间字符串。

这很简单,尽管
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);

这是另一个解决方案

$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)
*/

您可以使用带有
preg\u replace\u callback()
的正则表达式来处理它。另一种可能是更改字符串在第一个数组中的存储方式。例如,如果要在将所有冒号存储在$times[]中之前将其替换为逗号,则只需执行一次explode(),而无需执行数组合并。当然,这是假设在这个特定的项目中修改存储在$times[]中的值是可以接受的。我猜数组合并对于这个解决方案来说是不够的,因为这些数组的数量会根据用户文件的输入而变化。无论如何,谢谢你的快速回答!:)有什么问题吗?可以传入多个数组。不必只有两个。