0

次のように2つの配列がある場合:

$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);2番目の配列を最初の配列の最後に配置します

于 2012-10-01T10:09:19.230 に答える
0

I am not sure about your requirement but to sort multi-dimensional array on some specific key You need to use usort function Try the code below:

$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 will be sorted by 'id'

于 2012-10-01T10:12:49.743 に答える
0

次のように、 array_merge()関数を使用できます。

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