2011-07-28 77 views
2

我想根據第一個主數組對所有php數組進行排序。基於另一個數組創建php數組。

這就是我要使用所有其他數組排序的主要數組:

Array (

[0] => 10 
[1] => 14 
[2] => 15 
[3] => 20 
[4] => 21 
[5] => 24 
[6] => 25 
[7] => 28 
[8] => 30 
[9] => 45 
[10] => 60 
[11] => 90 
[12] => 120 
[13] => 150 
[14] => 180 
[15] => 210 
[16] => 240 
[17] => 270 
[18] => 365 

) 

這都是需要進行排序數組:

Array (

[0] => Array 
    (
     [14] => 49.21 
     [20] => 71.04 
     [25] => 89.58 
     [30] => 100.00 
    ) 

[1] => Array 
    (
     [180] => 412.00 
     [150] => 347.00 
     [120] => 285.00 
     [90] => 224.00 
     [60] => 165.00 
     [30] => 100.00 
     [14] => 47.00 
    ) 

我需要最終結果如下所示:

Array (

[0] => Array 
    (
     [10] => n/a 
     [14] => 49.21 
     [15] => n/a 
     [20] => 71.04 
     [21] => n/a 
     [24] => n/a 
     [25] => 89.58 
     [28] => n/a 
     [30] => 100.00 
     [45] => n/a 
     [60] => n/a 
     [90] => n/a 
     [120] => n/a 
     [150] => n/a 
     [180] => n/a 
     [210] => n/a 
     [240] => n/a 
     [270] => n/a 
     [365] => n/a 
    ) 

[1] => Array 
    (
     [10] => n/a 
     [14] => 71.04 
     [15] => n/a 
     [20] => n/a 
     [21] => n/a 
     [24] => n/a 
     [25] => n/a 
     [28] => n/a 
     [30] => 100.00 
     [45] => n/a 
     [60] => 165.00 
     [90] => 224.00 
     [120] => 285.00 
     [150] => 347.00 
     [180] => 412.00 
     [210] => n/a 
     [240] => n/a 
     [270] => n/a 
     [365] => n/a 
    ) 

    ) 

謝謝。

+1

「短路」?排序? – deceze

+0

看起來不像是給我排序。你能解釋一下你想做什麼嗎?對我來說,它看起來像填充未使用的鍵陣列,然後通過這個鍵排序(這可以通過'ksort'完成) – Nobody

回答

0

如果我從你的問題中理解了它,你想讓這兩個數組的長度相同,並將其中沒有的鍵設置爲"n/a"

array_merge與變體(Demo):

$shorten = array(
    0 => 10, 
    1 => 14, 
    2 => 15, 
    3 => 20, 
    4 => 21, 
    5 => 24, 
    6 => 25, 
    7 => 28, 
    8 => 30, 
    9 => 45, 
    10 => 60, 
    11 => 90, 
    12 => 120, 
    13 => 150, 
    14 => 180, 
    15 => 210, 
    16 => 240, 
    17 => 270, 
    18 => 365, 
); 

$data = array(
    0 => array(
    14 => '49.21', 
    20 => '71.04', 
    25 => '89.58', 
    30 => '100.00', 
), 
    1 => array(
    180 => '412.00', 
    150 => '347.00', 
    120 => '285.00', 
    90 => '224.00', 
    60 => '165.00', 
    30 => '100.00', 
    14 => '47.00', 
), 
); 

// default array as the base 
$shorten = array_combine($shorten, array_fill(0, count($shorten), 'n/a')); 

foreach($data as &$array) { 
    // merge to get set members 
    $array = array_merge($shorten, $array); 
} 
unset($array); 

var_dump($data); 

結果:

array(2) { 
    [0]=> 
    array(23) { 
    [0]=> 
    string(3) "n/a" 
    [1]=> 
    string(3) "n/a" 
    [2]=> 
    string(3) "n/a" 
    [3]=> 
    string(3) "n/a" 
    [4]=> 
    string(3) "n/a" 
    [5]=> 
    string(3) "n/a" 
    [6]=> 
    string(3) "n/a" 
    [7]=> 
    string(3) "n/a" 
    [8]=> 
    string(3) "n/a" 
    [9]=> 
    string(3) "n/a" 
    [10]=> 
    string(3) "n/a" 
    [11]=> 
    string(3) "n/a" 
    [12]=> 
    string(3) "n/a" 
    [13]=> 
    string(3) "n/a" 
    [14]=> 
    string(3) "n/a" 
    [15]=> 
    string(3) "n/a" 
    [16]=> 
    string(3) "n/a" 
    [17]=> 
    string(3) "n/a" 
    [18]=> 
    string(3) "n/a" 
    [19]=> 
    string(5) "49.21" 
    [20]=> 
    string(5) "71.04" 
    [21]=> 
    string(5) "89.58" 
    [22]=> 
    string(6) "100.00" 
    } 
    [1]=> 
    array(26) { 
    [0]=> 
    string(3) "n/a" 
    [1]=> 
    string(3) "n/a" 
    [2]=> 
    string(3) "n/a" 
    [3]=> 
    string(3) "n/a" 
    [4]=> 
    string(3) "n/a" 
    [5]=> 
    string(3) "n/a" 
    [6]=> 
    string(3) "n/a" 
    [7]=> 
    string(3) "n/a" 
    [8]=> 
    string(3) "n/a" 
    [9]=> 
    string(3) "n/a" 
    [10]=> 
    string(3) "n/a" 
    [11]=> 
    string(3) "n/a" 
    [12]=> 
    string(3) "n/a" 
    [13]=> 
    string(3) "n/a" 
    [14]=> 
    string(3) "n/a" 
    [15]=> 
    string(3) "n/a" 
    [16]=> 
    string(3) "n/a" 
    [17]=> 
    string(3) "n/a" 
    [18]=> 
    string(3) "n/a" 
    [19]=> 
    string(6) "412.00" 
    [20]=> 
    string(6) "347.00" 
    [21]=> 
    string(6) "285.00" 
    [22]=> 
    string(6) "224.00" 
    [23]=> 
    string(6) "165.00" 
    [24]=> 
    string(6) "100.00" 
    [25]=> 
    string(5) "47.00" 
    } 
} 

變體與映射函數(Demo):

$shorten = array(
    0 => 10, 
    1 => 14, 
    2 => 15, 
    3 => 20, 
    4 => 21, 
    5 => 24, 
    6 => 25, 
    7 => 28, 
    8 => 30, 
    9 => 45, 
    10 => 60, 
    11 => 90, 
    12 => 120, 
    13 => 150, 
    14 => 180, 
    15 => 210, 
    16 => 240, 
    17 => 270, 
    18 => 365, 
); 

// overload $shorten array with a mapping function 
$shorten = function(array $a) use ($shorten) 
{ 
    $r = array(); 
    foreach($shorten as $i => $k) 
    { 
     $r[$k] = isset($a[$k]) ? $a[$k] : 'n/a'; 
    } 
    return $r; 
}; 


$data = array(
    0 => array(
    14 => '49.21', 
    20 => '71.04', 
    25 => '89.58', 
    30 => '100.00', 
), 
    1 => array(
    180 => '412.00', 
    150 => '347.00', 
    120 => '285.00', 
    90 => '224.00', 
    60 => '165.00', 
    30 => '100.00', 
    14 => '47.00', 
), 
); 

// apply mapping function to $data 
$data = array_map($shorten, $data); 

var_dump($data); # result 

結果:

array(2) { 
    [0]=> 
    array(19) { 
    [10]=> 
    string(3) "n/a" 
    [14]=> 
    string(5) "49.21" 
    [15]=> 
    string(3) "n/a" 
    [20]=> 
    string(5) "71.04" 
    [21]=> 
    string(3) "n/a" 
    [24]=> 
    string(3) "n/a" 
    [25]=> 
    string(5) "89.58" 
    [28]=> 
    string(3) "n/a" 
    [30]=> 
    string(6) "100.00" 
    [45]=> 
    string(3) "n/a" 
    [60]=> 
    string(3) "n/a" 
    [90]=> 
    string(3) "n/a" 
    [120]=> 
    string(3) "n/a" 
    [150]=> 
    string(3) "n/a" 
    [180]=> 
    string(3) "n/a" 
    [210]=> 
    string(3) "n/a" 
    [240]=> 
    string(3) "n/a" 
    [270]=> 
    string(3) "n/a" 
    [365]=> 
    string(3) "n/a" 
    } 
    [1]=> 
    array(19) { 
    [10]=> 
    string(3) "n/a" 
    [14]=> 
    string(5) "47.00" 
    [15]=> 
    string(3) "n/a" 
    [20]=> 
    string(3) "n/a" 
    [21]=> 
    string(3) "n/a" 
    [24]=> 
    string(3) "n/a" 
    [25]=> 
    string(3) "n/a" 
    [28]=> 
    string(3) "n/a" 
    [30]=> 
    string(6) "100.00" 
    [45]=> 
    string(3) "n/a" 
    [60]=> 
    string(6) "165.00" 
    [90]=> 
    string(6) "224.00" 
    [120]=> 
    string(6) "285.00" 
    [150]=> 
    string(6) "347.00" 
    [180]=> 
    string(6) "412.00" 
    [210]=> 
    string(3) "n/a" 
    [240]=> 
    string(3) "n/a" 
    [270]=> 
    string(3) "n/a" 
    [365]=> 
    string(3) "n/a" 
    } 
} 
+0

謝謝你想要的。 – gt29

1

假設初始陣列是$源,和$待辦事項是你的第二陣列與所述兩個子集,則:

$keys = array_flip($todo); 
$keys = array_map(function() { return 'n/a'; }, $keys); // set all values to be "n/a"; 

foreach($todo as $idx => $do) { 
    $todo[$idx] = $do + $keys; // merge without renumbering. 
} 
+0

我也想過陣列聯盟,但是'$ todo'的關鍵順序並未保留,它被添加到後面。無論如何,一定不是問題。 – hakre

+0

是足夠真實的,但是如果它成爲問題,就很容易ksort()。 –

相關問題