将具有相同值的两个数组组合到键

时间:2018-04-16 23:35:37

标签: php arrays

我有第一个名为$monthsNumber

的数组
$monthsNumber = array(
                       0 => 2,
                       1 => 4,
                       2 => 5
                     )

我有第二个名为$monthsName

的数组
$monthsName = array(
                     1 => 'January',
                     2 => 'February',
                     3 => 'March',
                     4 => 'April',
                     5 => 'May',
                     6 => 'June',
                     7 => 'July',
                     8 => 'August', 
                     ...
                     12 => 'December'
                   )

在第一步中,用户可以选择月份($monthsNumber)。 我想得到第三个将与这两个组合在一起的数组,它将包含:

$outputArr = array(
               0 => 'March',
               1 => 'May',
               2 => 'June')

最后一个数组中的键并不重要 - 它可以是任何东西。

我试过array_merge,array_intersect_key和array_intersect_assoc - 不起作用。

请注意,第一个数组中的键与第二个数组中的键不同

我无法解释得更多,抱歉:)

2 个答案:

答案 0 :(得分:1)

如何使用array_map来处理$monthsNumber

的元素
$outputArr = array_map(function ($m) use($monthsName) { return $monthsName[$m+1]; }, $monthsNumber);
print_r($outputArr);

输出:

Array
(
    [0] => March
    [1] => May
    [2] => June
)

答案 1 :(得分:1)

如果您希望$monthsNumber数组的$monthsName索引匹配,并且您只想过滤单个来自$monthsName的价值。 您可以将array_flip应用于$monthsNumber,以允许使用array_intersect_key来匹配$monthsName的密钥。充当允许值的白名单。

示例:https://3v4l.org/IDJdU

$monthsFiltered = array_intersect_key($monthsName, array_flip($monthsNumber));

print_r($monthsFiltered);

结果:

Array
(
    [2] => February
    [4] => April
    [5] => May
)

要从$monthsName中删除保留的索引,您可以使用array_values(...)

包装上面的内容
$monthsFiltered = array_values($monthsFiltered);
print_r($monthsFiltered);

结果:

Array
(
    [0] => February
    [1] => April
    [2] => May
)

如果您需要检索多个相同的$monthsName值,则可以在array_map上使用$monthsNumber。要检索$monthsName的所需值,并将其use()传递给回调函数并验证索引是否存在。

数据集:$monthsNumber = [2, 4, 5, 2, 2];

示例:https://3v4l.org/ObOkI

$monthsFiltered = array_map(function($v) use($monthsName) {
    return isset($monthsName[$v]) ? $monthsName[$v] : false;
}, $monthsNumber);

print_r($monthsFiltered);

结果:

Array
(
    [0] => February
    [1] => April
    [2] => May
    [3] => February
    [4] => February
)

否则,您还可以使用foreach构建所需的数组值。

示例:https://3v4l.org/Loapt

$monthsFiltered = [];
foreach ($monthsNumber as $v) {
    if (isset($monthsName[$v]) && !in_array($monthsName[$v], $monthsFiltered)) {
        $monthsFiltered[] = $monthsName[$v];
    }
}

print_r($monthsFiltered);

结果:

Array
(
    [0] => February
    [1] => April
    [2] => May
)