我有第一个名为$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 - 不起作用。
请注意,第一个数组中的键与第二个数组中的键不同
我无法解释得更多,抱歉:)
答案 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
的密钥。充当允许值的白名单。
$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];
$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
构建所需的数组值。
$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
)