如何将两个相同长度的数组合并为一个具有两个字段的数组(不附加/合并)

时间:2010-05-20 21:30:50

标签: php arrays multidimensional-array

说,我有一个数月的数组

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

我可以遍历两个数组并填充$monthdetails。我想知道是否有任何功能/更简单的方法来实现相同的结果。

谢谢! 拉吉

7 个答案:

答案 0 :(得分:3)

鉴于两个数组的顺序相同:

foreach ($months as $key => $value) {
  $monthdetails[$key] = array('month' => $value, 'days' => $mdays[$key]);
}

答案 1 :(得分:1)

array_combine

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


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

这不是您正在寻找的,但您应该调整系统以使用此方法。

答案 2 :(得分:1)

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

$count = count($months);
$monthdetails = array();
for ($i=0; $i<$count; $i++) {
    $monthdetails[] = array('month' => $months[$i], 'days' => $mdays[$i]);
}

编辑:与其他答案一样,array_combine()立即浮现在脑海中,但它并不能完全解决问题。

编辑2:我仍然建议不要使用这种直接方法,因为它没有处理闰年的可能性。重新发明日期时间轮通常不是一个好主意。

答案 3 :(得分:0)

如果您可以使用这样的数组结构:

Array
(
    [Jan] => 31
    [Feb] => 28
    [Mar] => 31
    ...
    [Dec] => 31
)

然后array_combine()是你的朋友:

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

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

答案 4 :(得分:0)

我相信array_combine可以做你想要的: http://www.php.net/manual/en/function.array-combine.php

它使用第一个数组作为键,第二个数组使用值。

答案 5 :(得分:0)

将两个数组与array_combine结合使用? http://www.php.net/manual/en/function.array-combine.php

答案 6 :(得分:0)

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