将两个数组映射在一起以创建包含关联行的索引数组

问题描述 投票:0回答:8

假设我有一个包含月份的数组

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

谢谢! 拉杰

php arrays multidimensional-array mapping associative-array
8个回答
3
投票

假设两个数组的顺序相同:

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

1
投票

数组组合

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


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

这并不完全是您想要的,但您应该调整您的系统以使用此方法。


1
投票

假设两个数组大小相同:

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

编辑:像其他答案一样,我立即想到了

array_combine()
,但它并不完全符合问题的要求。

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


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

0
投票

您可以将两个大小相等的数组映射在一起,在回调签名中指定首选行键,然后只需调用

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

-1
投票

如果您可以接受这样的数组结构:

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

那么 array_combine() 就是你的朋友:

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

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


-1
投票

我相信 array_combine 可以满足您的需求: http://www.php.net/manual/en/function.array-combine.php

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.