Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将数组与标识符合并?_Php_Arrays_Function - Fatal编程技术网

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);

?>