PHP按值为2个不同的数组值合并数组

时间:2015-07-02 07:16:56

标签: php arrays merge

我试图将两个不同的数组合并为一个数组。有人可以帮我吗?

我有这样的数组

[0] (Array)#2
  [rank] "579"
  [id] "1"
[1] (Array)#4
  [rank] "251"
  [id] "2"

[0] (Array)#2
  [size] "S"
  [rank] "251"
[1] (Array)#15
  [size] "L"
  [rank] "579"

我需要这样

[0] (Array)#2
  [size] "S"
  [rank] "251"
  [id] "1"
[1] (Array)#15
  [size] "L"
  [rank] "579"
  [id] "1"

5 个答案:

答案 0 :(得分:4)

未经测试,但这应该有效,或至少让你接近。

for ($array1 as $key1 => $value1) {
    for ($array2 as $key2 => $value2) {
        if ($value1['rank'] == $value2['rank']) {
            $result[$key1] = [$value2['size'], $value1['rank'], $value1['id']];
        };
    };
};

答案 1 :(得分:1)

foreach($arr1 as $key1 => $data1){
    foreach($arr2 as $key2 => $data2){
        if($data1['rank']==$data2['rank']){
            $result[] = array_merge($data1, $data2);
        }
    }
}
print_r($result);

答案 2 :(得分:0)

虽然我不明白为什么要以这种方式合并数组,但这里有一种通过序列合并数组的方法。所以array1的第一个子节点将与array2等的第一个子节点合并。

<?php

$array1 = [
    [
        'rank' => 579,
        'id' => 1
    ],
    [
        'rank' => 251,
        'id' => 2
    ]
];

$array2 = [
    [
        'size' => 'S',
        'rank' => 251
    ],
    [
        'size' => 'L',
        'rank' => 579
    ]
];


foreach ($array1 as $key => &$data) {
    if (isset($array2[$key])) {
        $data = array_merge($data, $array2[$key]);    
    }
}

var_dump($array1);

答案 3 :(得分:0)

//save keys of ranks in the 1st array
$keys = array(); 
foreach($arr1 as $k => $v)
   $keys[$v['rank']] = $k;

$res = array();
// Walk through the 2nd array and make result
foreach($arr2 as $k => $v) 
 if (isset($keys[$v['rank']])) 
    $res[] = array_merge($arr1[$keys[$v['rank']]], $v);

print_r($res);

答案 4 :(得分:0)

看看你提供的数组,我假设你想用关键排名作为加入点(这似乎不是一个好主意,问题是如果他们的独特与否如果它们是唯一的,那么一个小方法可以帮助根据它们的等级获取元素,其余的只是汇总结果:

<?php

$arr1 = [
    [
        'rank' => 579,
        'id' => 1
    ],
    [
        'rank' => 251,
        'id' => 2
    ],
];

$arr2 = [
    [
        'size' => 'S',
        'rank' => 251
    ],
    [
        'size' => 'L',
        'rank' => 579
    ],
];

function getItemByRank($array, $rank)
{
    foreach ($array as $item){
        if ($item['rank'] === $rank) {
            return $item;
        }
    }
}


$result = [];
foreach ($arr1 as $k => $item) {

    $match = getItemByRank($arr2, $item['rank']);

    if (isset($match)) {
        $result[$k] = $item;
        $result[$k]['size'] = $match['size'];
    }
}

print_r($result);

输出:

Array
(
    [0] => Array
        (
            [rank] => 579
            [id] => 1
            [size] => L
        )

    [1] => Array
        (
            [rank] => 251
            [id] => 2
            [size] => S
        )

)