PHP多数组合并问题求助:使用array_merge等方法未成功
如何合并两个时间数组?
我目前得到的输出是两个数组:
array(4) { [0]=> string(5) "12:00" [1]=> string(5) "12:20" [2]=> string(5) "12:40" [3]=> string(5) "01:00" } array(2) { [0]=> string(5) "02:00" [1]=> string(5) "02:20" }
我的调用代码如下:
$t_i=$this->Hospital_model->get_time_interval_break_split( $t_i_b->start, $t_i_b->end, $consult_time); $output =array_merge($t_i);
模型代码如下:
public function get_time_interval_break_split($start_time,$end_time,$consult_time) { $array = array(); $time_diff = $consult_time * 60; if(!empty($start_time)) { for ($i=strtotime($start_time); $i<=strtotime($end_time); $i += $time_diff) { $array[] = date("h:i", $i); } } return $array; }
我想要将这两个数组合并为一个,尝试过使用array_map、array_merge等方法但未成功,恳请帮忙解决该问题。
问题分析与解决方案
你的核心问题是调用array_merge的方式不正确:从输出看,你应该是得到了一个包含两个待合并数组的二维数组(比如$t_i是[数组A, 数组B]),但array_merge需要接收多个独立的数组作为参数,而不是一个包含数组的数组。
下面是几种可行的解决办法:
1. 可变参数展开(推荐,PHP 5.6+)
使用PHP的展开运算符...,把二维数组中的元素拆成独立参数传给array_merge:
// 假设$t_i是包含两个待合并数组的二维数组 $output = array_merge(...$t_i);
2. 兼容低版本PHP的写法
如果你的PHP版本低于5.6,用call_user_func_array来间接调用array_merge,自动把二维数组的元素作为参数传入:
$output = call_user_func_array('array_merge', $t_i);
3. 直接传入两个独立数组(如果是分别生成的)
如果是你调用了两次get_time_interval_break_split得到两个独立数组(比如$array1和$array2),直接把它们作为参数传入array_merge即可:
$array1 = $this->Hospital_model->get_time_interval_break_split($t_i_b1->start, $t_i_b1->end, $consult_time); $array2 = $this->Hospital_model->get_time_interval_break_split($t_i_b2->start, $t_i_b2->end, $consult_time); $output = array_merge($array1, $array2);
为什么你之前的尝试失败?因为array_merge($t_i)只传入了一个参数(二维数组),array_merge会直接返回这个参数本身,不会自动合并里面的子数组。只有当你把每个需要合并的数组作为单独参数传入时,它才会把所有元素合并成一个一维数组。
内容的提问来源于stack exchange,提问作者user_777
相关产品推荐
相关产品推荐

