0

如果我有两个数组如下:

$array1 = array(array('id'=>11,'name'=>'Name1'),array('id'=>22,'name'=>'Name2'), array('id'=>33,'name'=>'Name3'),array('id'=>44,'name'=>'Name4'),array('id'=>55,'name'=>'Name5'));

$array2 = array(array('id'=>22,'name'=>'Name2'),array('id'=>55,'name'=>'Name5'));

我的预期结果,array2 应该总是在开头:

$newarray = array(array('id'=>22,'name'=>'Name2'),array('id'=>55,'name'=>'Name5'), array('id'=>11,'name'=>'Name1'), array('id'=>33,'name'=>'Name3'),array('id'=>44,'name'=>'Name4'));

My current solution is using two for loops:
foreach($array2 as $Key2 => $Value2) {       

    foreach($array1 as $Key1 => $Value1){            

        if($Value1['id'] != $Value2['id']) {
            //push array 

        }    
    }    
}

编辑:结果“$newarray”不应包含来自 array1 的重复 ID。

但我正在寻找更快更简单的解决方案。

解决方案:

$a1 = 数组();foreach ($array1 as $v) $a1[$v['uuid']] = $v;

$a2 = 数组();foreach ($array2 as $v) $a2[$v['uuid']] = $v;

$filtered = array_values(array_diff_key($a1, $a2)); //print_r($filtered);

$newarray = array_merge($array2, $filtered);

感谢你们!!!!

谢谢。

问候杰克

4

3 回答 3

1

你想把$new_array = array_merge($array2, $array1);第二个数组放在第一个数组的末尾

于 2012-10-01T10:09:19.230 回答
0

您可以为此使用array_merge()函数,如下所示:

$newarray = array_merge($array2, $array1);
于 2012-10-01T10:09:00.660 回答
0

我不确定您的要求,但要在某些特定键上对多维数组进行排序您需要使用usort函数尝试以下代码:

$cmp = function ($a, $b){  
    $a_val = $a['id'];  
    $b_val = $b['id'];

    if ( $a_val == $b_val) {
        return 0;
    }
    return ($a_val < $b_val) ? -1 : 1;
};
usort($array2,$cmp);

$array2 将按 'id' 排序

于 2012-10-01T10:12:49.743 回答