2017-09-14 54 views
1

我想基於特定關鍵字排序第二級值。在這種情況下,該關鍵字是red基於關鍵字排序第二級數組值

如果我檢查回調函數中的步驟似乎工作,但最終結果是不變的。它還按字母順序排列頂級鍵。如預期,因爲只有uasort()排序您傳遞給它的第一個參數,第一級陣列($數據)數組

$data = array(
    'foo' => array(
     'red', 'green' 
    ), 
    'bar' => array(
     'yellow', 'red' 
    ), 
); 

print_r($data); 

uasort($data, function($data) { 
    $matches = preg_grep("/red/", $data); 

    $rest = array_diff($data, $matches); 

    $order = array_merge($matches, $rest); 

    return $order; 

}); 

print_r($data); 

回答

2

您的代碼不起作用。儘管運行和語法正確,其餘的代碼也無濟於事。

這裏是一個工作示例:

$data = array(
    'foo' => array(
     'red', 'green' 
    ), 
    'bar' => array(
     'yellow', 'red' 
    ), 
); 

array_walk($data,function(&$v){ 
    uasort($v,function($a,$b){ 
     return preg_match('/red/',$a)?-1:1; 
});}); 

print_r($data); 
  • array_walks()通過第一級陣列迭代。
  • uasort()在回調中提供,並處理二級數組的排序部分。
  • 然後preg_match()用於匹配字符串並返回一個適合於在回調中重新排序的值uasort()
相關問題