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[]中的值是可以接受的。我猜数组合并对于这个解决方案来说是不够的,因为这些数组的数量会根据用户文件的输入而变化。无论如何,谢谢你的快速回答!:)有什么问题吗?可以传入多个数组。不必只有两个。