假设我有一个包含月份的数组
$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
。我想知道是否有任何功能/更简单的方法可以达到相同的结果。
谢谢! 拉杰
假设两个数组的顺序相同:
foreach ($months as $key => $value) { $monthdetails[$key] = array('month' => $value, 'days' => $mdays[$key]); }
$monthdetails = array_combine($months, $mdays);
echo $monthdetails['Jan']; //31
这并不完全是您想要的,但您应该调整您的系统以使用此方法。
假设两个数组大小相同:
$count = count($months);
$monthdetails = array();
for ($i=0; $i<$count; $i++) {
$monthdetails[] = array('month' => $months[$i], 'days' => $mdays[$i]);
}
编辑:像其他答案一样,我立即想到了
array_combine()
,但它并不完全符合问题的要求。
编辑2:我仍然建议不要使用这种直接方法,因为它不处理闰年的可能性。重新发明日期时间轮通常不是一个好主意。
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 );
您可以将两个大小相等的数组映射在一起,在回调签名中指定首选行键,然后只需调用
get_defined_vars()
。
代码:(演示)
$months = ['Jan', 'Feb', 'Mar', 'Dec'];
$mdays = [31, 28, 31, 31];
var_export(
array_map(
fn($month, $days) => get_defined_vars(),
$months,
$mdays
)
);
输出:
array (
0 =>
array (
'month' => 'Jan',
'days' => 31,
),
1 =>
array (
'month' => 'Feb',
'days' => 28,
),
2 =>
array (
'month' => 'Mar',
'days' => 31,
),
3 =>
array (
'month' => 'Dec',
'days' => 31,
),
)
如果您可以接受这样的数组结构:
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
它使用第一个数组作为键,第二个数组作为值。
用 array_combine 合并两个数组? http://www.php.net/manual/en/function.array-combine.php