2014-04-03 229 views
2

在晚上的晚些時候,一直在看着這個太長的傢伙。基於另一個數組鍵的排序多維數組鍵

這是鍵正確順序的數組。

Array 
(
    [FirstName] => 'Timmy' 
    [LastName] => 'O Toole' 
    [Address] => 'Nowhere' 
    [Tel] => '12345' 
    [Email] => '[email protected]' 
) 

我想下面的陣列中的每個記錄的鍵順序相匹配如上。

(
    [0] => Array 
     (
      [FirstName] => 'Robin' 
      [Address] => 'Cave' 
      [LastName] => 'Mactimmy' 
      [Tel] => '9076' 
      [Email] => '[email protected]' 
     ) 

    [1] => Array 
     (
      [Address] => 'uytr' 
      [FirstName] => 'Bill' 
      [Email] => '[email protected]' 
      [LastName] => 'Gates' 
      [Tel] => '7654' 
     ) 

    [2] => Array 
     (
      [LastName] => 'Mahoney' 
      [Email] => '[email protected]' 
      [FirstName] => 'Tom' 
      [Tel] => '5689' 
      [Address] => 'kklll' 
     ) 
) 

我已經嘗試過ksort和usort,但數組排序似乎沒有更新。

+0

你說你試過用ksort,但是ksort不會像你想要的那樣排序。 –

回答

2

基礎上的數據:

$array = [ 
    0 => Array 
     (
      'FirstName' => 'Robin', 
      'Address' => 'Cave', 
      'LastName' => 'Mactimmy', 
      'Tel' => '9076', 
      'Email' => '[email protected]', 
     ), 

    1 => Array 
     (
      'Address' => 'uytr', 
      'FirstName' => 'Bill', 
      'Email' => '[email protected]', 
      'LastName' => 'Gates', 
      'Tel' => '7654', 
     ), 

    2 => Array 
     (
      'LastName' => 'Mahoney', 
      'Email' => '[email protected]', 
      'FirstName' => 'Tom', 
      'Tel' => '5689', 
      'Address' => 'kklll', 
     ) 
]; 

我認爲它是粘性d的解決方案:

<?php 

$order = [ 'FirstName', 'LastName', 'Address', 'Tel', 'Email']; 

$result = []; 
foreach ($array as $sortable) { 
    $result[] = array_merge(array_flip($order), $sortable); 
} 

print_r($result); 
+1

這是第一個爲我工作的人,看起來對我來說是最直接的。上面的array_map也是這種方法的一個很好的方法,但我更喜歡這種情況下的顯式性。謝謝大家。 – jiraiya

1

使用自定義鍵選機:

function cmp($a, $b) { 
    // Custom key sort 
} 

uksort($array, "cmp"); 

或使用遞歸ksort:

ksortRecursive(&$array, $sort_flags = SORT_REGULAR) { 
    if (!is_array($array)) return false; 
    ksort($array, $sort_flags); 
    foreach ($array as &$arr) { 
     ksortRecursive($arr, $sort_flags); 
    } 
    return true; 
} 

從借來的:https://gist.github.com/cdzombak/601849

1
function cmp($a, $b) 
{ 
    $order = array('FirstName' => 0, 'LastName' => 1, 'Address' => 2, 'Tel' => 3, 'Email' => 4); 
    if ($a == $b || !isset($order[$a]) || !isset($order[$b])) { 
     return 0; 
    } 
    return ($order[$a] < $order[$b]) ? -1 : 1; 
} 

uksort($a, "cmp"); 
2

您可以結合使用array_maparray_merge。事情是這樣的:

$result = array_map(
    function ($arr) use($sample) { return array_merge($sample, $arr); }, 
    $array 
); 

在這裏,我認爲$array是對象數組,並$sample是陣列正確有序的鑰匙。

1
function customArraySort($array, $exampleArray) { 
    $returnArray = array(); 
    foreach($array as $arrIndex => $arrSubArr) { 
     $returnArray[$arrIndex] = array(); 
     foreach($exampleArray as $exArIndex => $value) 
      $returnArray[$arrIndex][$exArIndex] = $arrSubArr[$exArIndex]; 
    } 
    return $returnArray; 
}