在两个 php 数组之间连接数组值和键
Join array values and keys between two php arrays
我需要合并(某种连接)两个具有相同键的数组,结果我想将第一个的值作为第二个的键:
示例:
$keyArray = [
"key1" => "map1",
"key2" => "map1",
"key3" => "map2",
"key4" => "map3"
];
$valuesArray = [
"key1" => "value1",
"key2" => "value2",
"key3" => "value3",
"key4" => "value3"
];
// 预期结果:
$mappedResultArray =
[
"map1" => [
"value1",
"value2"
],
"map2" => [
"value3"
],
"map3" => [
"valu3"
],
];
我知道这可以通过在两个数组中使用 php loops/foreach 来实现,
但我想有一个使用 PHP array_* 函数的解决方案 (array_map, array_merge ....)
您可以使用 array_walk 和 闭包 来执行此操作,请参见下面的示例:
$keyArray = [ "key1" => "map1", "key2" => "map1", "key3" => "map2", "key4" => "map3" ];
$valueArray = [ "key1" => "value1", "key2" => "value2", "key3" => "value3", "key4" => "value3" ];
function getMergeByKeys($keyArray, $valueArray) {
$mapped = [];
array_walk(
$keyArray,
function($key, $value) use ($valueArray, &$mapped) {
$mapped[$key][] = $valueArray[$value];
});
return $mapped;
}
print_r(getMergeByKeys($keyArray, $valueArray));
结果会是:
Array
(
[map1] => Array
(
[0] => value1
[1] => value2
)
[map2] => Array
(
[0] => value3
)
[map3] => Array
(
[0] => value3
)
)
一个简单的 foreach 就是您所需要的
$keyArray = [
"key1" => "map1",
"key2" => "map1",
"key3" => "map2",
"key4" => "map3"
];
$valuesArray = [
"key1" => "value1",
"key2" => "value2",
"key3" => "value3",
"key4" => "value3"
];
$newArr = [];
foreach( $keyArray as $key => $value ){
$newArr[$value][] = $valuesArray[$key];
}
print_r($newArr);
这导致:
Array
(
[map1] => Array
(
[0] => value1
[1] => value2
)
[map2] => Array
(
[0] => value3
)
[map3] => Array
(
[0] => value3
)
)
$keys = [ "key1" => "map1", "key2" => "map1", "key3" => "map2", "key4" => "map3" ];
$values = [ "key1" => "value1", "key2" => "value2", "key3" => "value3", "key4" => "value3" ];
$result = array_reduce(
array_merge_recursive($keys, $values),
function ($carry, $item) {
$carry[$item[0]][] = $item[1];
return $carry;
}, []
);
print_r($result);
我需要合并(某种连接)两个具有相同键的数组,结果我想将第一个的值作为第二个的键:
示例:
$keyArray = [
"key1" => "map1",
"key2" => "map1",
"key3" => "map2",
"key4" => "map3"
];
$valuesArray = [
"key1" => "value1",
"key2" => "value2",
"key3" => "value3",
"key4" => "value3"
];
// 预期结果:
$mappedResultArray =
[
"map1" => [
"value1",
"value2"
],
"map2" => [
"value3"
],
"map3" => [
"valu3"
],
];
我知道这可以通过在两个数组中使用 php loops/foreach 来实现, 但我想有一个使用 PHP array_* 函数的解决方案 (array_map, array_merge ....)
您可以使用 array_walk 和 闭包 来执行此操作,请参见下面的示例:
$keyArray = [ "key1" => "map1", "key2" => "map1", "key3" => "map2", "key4" => "map3" ];
$valueArray = [ "key1" => "value1", "key2" => "value2", "key3" => "value3", "key4" => "value3" ];
function getMergeByKeys($keyArray, $valueArray) {
$mapped = [];
array_walk(
$keyArray,
function($key, $value) use ($valueArray, &$mapped) {
$mapped[$key][] = $valueArray[$value];
});
return $mapped;
}
print_r(getMergeByKeys($keyArray, $valueArray));
结果会是:
Array
(
[map1] => Array
(
[0] => value1
[1] => value2
)
[map2] => Array
(
[0] => value3
)
[map3] => Array
(
[0] => value3
)
)
一个简单的 foreach 就是您所需要的
$keyArray = [
"key1" => "map1",
"key2" => "map1",
"key3" => "map2",
"key4" => "map3"
];
$valuesArray = [
"key1" => "value1",
"key2" => "value2",
"key3" => "value3",
"key4" => "value3"
];
$newArr = [];
foreach( $keyArray as $key => $value ){
$newArr[$value][] = $valuesArray[$key];
}
print_r($newArr);
这导致:
Array
(
[map1] => Array
(
[0] => value1
[1] => value2
)
[map2] => Array
(
[0] => value3
)
[map3] => Array
(
[0] => value3
)
)
$keys = [ "key1" => "map1", "key2" => "map1", "key3" => "map2", "key4" => "map3" ];
$values = [ "key1" => "value1", "key2" => "value2", "key3" => "value3", "key4" => "value3" ];
$result = array_reduce(
array_merge_recursive($keys, $values),
function ($carry, $item) {
$carry[$item[0]][] = $item[1];
return $carry;
}, []
);
print_r($result);