如何两个相同长度的阵列有两个字段合并到一个数组(不追加/合并)
问题描述:
说,我有个如何两个相同长度的阵列有两个字段合并到一个数组(不追加/合并)
$months = array('Jan', 'Feb', 'Mar'...'Dec');
,还有一个是数组,天(比方说,对于2010年)
$mdays = array(31, 28, 31...31);
我要合并/结合这两个阵列,成这样的阵列:
$monthdetails[0] = ('month' => 'Jan', 'days' => 31)
$monthdetails[1] = ('month' => 'Feb', 'days' => 28)
...
$monthdetails[11] = ('month' => 'Dec', 'days' => 31)
我可以通过阵列和f二者环生病$monthdetails
。我想知道是否有任何功能/更简单的方法来实现相同的结果。
谢谢! 拉吉
答
$monthdetails = array_combine($months, $mdays);
echo $monthdetails['Jan']; //31
这不正是你要找的东西,但你应该调整你的系统中使用这种方法。
答
鉴于这两个数组的顺序是一样的:
foreach ($months as $key => $value) { $monthdetails[$key] = array('month' => $value, 'days' => $mdays[$key]); }
答
如果你可以用一个阵列结构这样的生活:
Array
(
[Jan] => 31
[Feb] => 28
[Mar] => 31
...
[Dec] => 31
)
然后array_combine()是你的朋友:
$monthdetails = array_combine($months, $mdays);
它可能是最快的方式...
答
假设两个数组的大小相同:
$count = count($months);
$monthdetails = array();
for ($i=0; $i<$count; $i++) {
$monthdetails[] = array('month' => $months[$i], 'days' => $mdays[$i]);
}
编辑:像其他的答案,array_combine()
立刻浮现在脑海,但它不会做什么提出这样的问题。
编辑2:我仍然建议不要使用这种直接的方法,因为它没有处理闰年的可能性。重新发明日期时间轮通常不是一个好主意。
+0
月份日的情况是一个例子来说明我的要求,而不是实际的要求。我不重新发明在PHP中的好日期系统:-) 感谢您的提示。 – Raj 2010-05-22 21:27:23
答
function month_callback($month, $day){
return array('month' => $month,
'day' => $day);
}
$months = array('Jan', 'Feb', 'Mar');
$days = array(31, 28, 31);
$monthdetails = array_map('month_callback', $months, $days);
print_r($monthdetails);
我不能使用这个,因为打印键名并不容易。另外,我可能必须在我的应用程序中合并超过2个数组。 foreach/for循环方法是唯一的选择。 感谢您的提示。 – Raj 2010-05-22 21:28:55