Php 如何将数组与标识符合并?
我有两个这样的阵列:Php 如何将数组与标识符合并?,php,arrays,function,Php,Arrays,Function,我有两个这样的阵列: $arr1 = ['yellow' => 1, 'red', => 5]; $arr2 = ['gray' => 3, 'black' => 8, 'orange' => 6, 'yellow' => 9]; 我想要这个结果: $merged = ['yellow' => [1, 'arr1'], 'red', => [5, 'arr1'], 'gray' => [3, 'arr2'], 'black' => [
$arr1 = ['yellow' => 1, 'red', => 5];
$arr2 = ['gray' => 3, 'black' => 8, 'orange' => 6, 'yellow' => 9];
我想要这个结果:
$merged = ['yellow' => [1, 'arr1'], 'red', => [5, 'arr1'], 'gray' => [3, 'arr2'], 'black' => [8, 'arr2'], 'orange' => [6, 'arr2'], 'yellow' => [9, 'arr2']];
但正如我阅读的文档所述,它没有这样的选项。有什么功能可以帮我完成吗?这可能就是您想要的:
<?php
$input = [
'arr1' => ['yellow' => 1, 'red' => 5],
'arr2' => ['yellow' => 10, 'gray' => 3, 'black' => 8, 'orange' => 6]
];
$output = [];
array_walk($input, function ($entry, $source) use (&$output) {
foreach ($entry as $key=>$val) {
$output[$key][] = [$val, $source];
}
});
print_r($output);
好的,我花了更长的时间才得出这个答案,因为你的问题中有一个bug。请参见数组1中“红色”后面的“,”
$arr1 = ['yellow' => 1, 'red' => 5];
$arr2 = ['gray' => 3, 'black' => 8, 'yellow' => 3, 'orange' => 6];
$arrays = ['arr1','arr2'];
$merged = [];
foreach ($arrays as $array) {
foreach (${$array} as $color => $value) {
$merged[$color][] = [$value,$array];
}
}
echo '<pre>';
print_r($merged);
echo '</pre>';
基于@arkascha,回答一个处理重复项的版本:
在arr1和arr2中都可以找到黄色吗??或者别的什么color@Vanojx1对它们不是独一无二的,我需要保留它们them@stack希望你很好,事情发展如你所愿;-)如果两个数组中都出现“黄色”,则此代码无法正常工作。它不会同时保留这两个值,但会覆盖。@KIKOSoftware在这种情况下将输出什么?@Chetan:输出太长,无法进行注释。。。但是如果你想知道,可以试试代码。@KIKOSoftware当然也可以,只要稍加修改。我相应地修改了答案。问题本身并没有具体说明这一要求,这就是为什么我完全实现了所要求的。此修改显然会更改输出格式定义。
$arr1 = ['yellow' => 1, 'red' => 5];
$arr2 = ['gray' => 3, 'black' => 8, 'yellow' => 3, 'orange' => 6];
$arrays = ['arr1','arr2'];
$merged = [];
foreach ($arrays as $array) {
foreach (${$array} as $color => $value) {
$merged[$color][] = [$value,$array];
}
}
echo '<pre>';
print_r($merged);
echo '</pre>';
Array
(
[yellow] => Array
(
[0] => Array
(
[0] => 1
[1] => arr1
)
[1] => Array
(
[0] => 3
[1] => arr2
)
)
[red] => Array
(
[0] => Array
(
[0] => 5
[1] => arr1
)
)
[gray] => Array
(
[0] => Array
(
[0] => 3
[1] => arr2
)
)
[black] => Array
(
[0] => Array
(
[0] => 8
[1] => arr2
)
)
[orange] => Array
(
[0] => Array
(
[0] => 6
[1] => arr2
)
)
)
<?php
$input = [
'arr1'=> ['yellow' => 1,'red' => 5, 'black' => 4],
'arr2'=> ['gray' => 3,'yellow' => 3, 'black' => 8,'orange' => 6],
'arr3'=> ['orange' => 2]
];
$output = [];
array_walk($input, function ($entry, $source) use (&$output) {
foreach ($entry as $key=>$val) {
if(!array_key_exists($key, $output))
$output[$key] = [[$val, $source]];
else
$output[$key][] = [$val, $source];
}
});
echo print_r($output);
?>