我正在尝试合并包含多维数组的两个数组,并以下面的格式创建第三个数组"
这是第一个多维数组:
Array
(
[USA1] => Array
(
[0] => NewYork
[1] => MASS
)
[USA2] => Array
(
[0] => NewYork
)
[USA3] => Array
(
[0] => NewYork
)
)
这是我的第二个多维数组:
Array
(
[USA1] => Array
(
[NewYork] => Array
(
[0] => Array
(
[0] => Town1
[1] => Town2
)
)
[MASS] => Array
(
[0] => Array
(
[0] => Town3
[1] => Town4
)
)
)
[USA2] => Array
(
[NewYork] => Array
(
[0] => Array
(
[0] => Town1
[1] => Town2
)
)
)
现在我想根据公共密钥创建第3个数组。如果键是匹配的,那么我需要以循环方式为这个数组分配一个值:
例如 如果值为" NewYork"在USA1键下,我必须分配" Town1"来自另一个数组的值。因为这个密钥也出现在USA2下,所以我必须分配" Town2" (循环时尚)。如果有更多" NewYork"值存在,如果有更多的值,如" Town9"然后我们必须分配该值,如果不存在那么我必须分配" Town1"价值回来。 如果密钥只出现一次,例如" MASS"那么我们需要删除第二个值,即" Town4"在这种情况下。
Array
(
[USA1] => Array
(
[0] => NewYork => Town1
[1] => Mass => Town3
)
[USA2] => Array
(
[0] => NewYork => Town2
)
[USA3] => Array
(
[0] => NewYork =>Town1
)
)
注意:除第3个之外的所有数组输出都来自print_r命令
非常感谢帮助。谢谢。
答案 0 :(得分:1)
我不清楚你要求的是什么。它并不是真正的合并,因为在你的最终数组[USA3]应该是空的,因为array2中没有匹配的键。而且你要求为循环分配值,这不是我期望数组合并的行为。
我假设你要做的是在城市中平均分配城镇。 基于这个假设,我只使用了第二个数组中USA1的值,但是这将产生你提供的第三个数组。我已经更新了代码示例以合并第二个数组。
$map = array();
foreach ($array2 as $usa => $cities)
{
$map = $cities + $map;
}
$towns = array();
foreach($array1 as $usa => $cityArray)
{
while(!empty($cityArray))
{
$city = array_shift( $cityArray );
if(empty($towns[$city]))
$towns[$city] = $map[$city][0];
$array3[ $usa ][] = array( $city => array_shift( $towns[$city] ) );
}
}
这样可行,但是如果你在$ array2 ['US1']和$ array2 ['US2']中有不同的值,那么你应该在将这两个数组发送到上面的代码之前将它们合并。更新代码正确合并第二个数组。