2014-01-11 16 views
0
$a= [ '1' => ['key'=>'1','id'=>'4' ], 
     '2' => ['key'=>'2','id'=>'1' ], 
     '3' => ['key'=>'3','id'=>'5' ] 
    ] 

$b = [1,5] 

,所以我要排序陣列$a使得如果$a[*]['id']是在$b陣列它應該是第一個。排序PHP數組它在其它陣列exsit

所以在這個例子中,出放應

$a = ['2' => ['key'=>'2','id'=>'1' ], 
     '3' => ['key'=>'3','id'=>'5' ] 
     '1' => ['key'=>'1','id'=>'4' ], 
    ] 

我試圖

uasort($a, function($k, $v) use ($b) { 
     return in_array($v['id'],$b) ? 1 : -1; 
    }); 

,但還沒有:(

是有做這樣使用任何特技的最佳方法php排序功能?

+0

你閱讀的文檔['uasort()'](http://us2.php.net/uasort)? – Sam

+0

yp,但不知道如何潛水達到'身份證'的價值來比較它在回撥函數 – Zalaboza

回答

3
uasort($a, function ($x, $y) use ($b) { 
    return !in_array($x['id'], $b); 
}); 

您必須注意,沒有使用$y,代碼將在不引用它的情況下工作,但我更願意使用這種方式來實現完整性。

X和Y是任意兩個數組值。如果排序函數返回1,則X放在最後(前Y,後X)。如果返回-1,X先走(前X,後Y)。

在這種情況下,排序函數將返回true(相當於1)如果$x[id]不在$b,所以爲了將第一Y,然後X.這排序將​​移動到最後位置的所有數組值均可進行id不在$b

說,經過,你也可以使用這個代碼,而無需$y

uasort($a, function ($x) use ($b) { 
    return !in_array($x['id'], $b); 
}); 
+0

你能向我解釋一下uasort傳遞給函數的變量是什麼?我的意思是什麼是$ y? – Zalaboza

+0

@Edakos我回答了,但我覺得你有效率的一個,所以從我的結尾:) –

0

這裏是另一個實施

$a= array('1' => array('key'=>'1','id'=>'4'), '2' => array('key'=>'2','id'=>'1'), '3' => array('key'=>'3','id'=>'5')); 
$b = array(1,5); 
asort($a); 
function customuksort($t1, $t2) { 
    global $a; 

    return $a[$t1] < $a[$t2] ? -1 : 1; 
} 
uksort($b, 'customuksort'); 

print_r($a); 

輸出是

Array ([1] => Array ([key] => 1 [id] => 4) [2] => Array ([key] => 2 [id] => 1) [3] => Array ([key] => 3 [id] => 5)) 
+0

按照@Edakos的答案,他有更好的解決方案。 –