如何两个相同长度的阵列有两个字段合并到一个数组(不追加/合并)

问题描述:

说,我有个如何两个相同长度的阵列有两个字段合并到一个数组(不追加/合并)

$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。我想知道是否有任何功能/更简单的方法来实现相同的结果。

谢谢! 拉吉

array_combine

$monthdetails = array_combine($months, $mdays); 


echo $monthdetails['Jan']; //31 

这不正是你要找的东西,但你应该调整你的系统中使用这种方法。

+0

我不能使用这个,因为打印键名并不容易。另外,我可能必须在我的应用程序中合并超过2个数组。 foreach/for循环方法是唯一的选择。 感谢您的提示。 – Raj 2010-05-22 21:28:55

鉴于这两个数组的顺序是一样的:

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); 

它可能是最快的方式...

相信array_combine你想要做什么: http://www.php.net/manual/en/function.array-combine.php

它使用的键第一个阵列,第二个值。

假设两个数组的大小相同:

$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

将两个数组合并为array_combine? http://www.php.net/manual/en/function.array-combine.php

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);