2013-07-25 26 views
0

我需要基於另一個數組排序值排序數組。需要基於另一個數組顯示順序soting多維數組

實際的數組:array(name=>'JK',age=>'20',place=>'India',year=>array(marks1=>array(sub1=>50,sub3=>70,sub7=>65,sub5=>75,sub4=>35), marks2=>array(sub8=>50,sub10=>70,sub12=>75,sub9=>35,sub11=>65))

排序順序排列:array(name=>1,year=>2,age=>3,place=>4,sub1=>5,sub3=>6,sub4=>7,sub5=>8,sub7=>9,sub8=>10,sub9=>11,sub10=>12,sub11=>13,sub12=>14)

預期的結果數組:

array(
    name=>'JK', 
    year=>array(
     marks1=>array(
      sub1=>50, 
      sub3=>70, 
      sub4=>35, 
      sub5=>75 
      sub7=>65 
     ), 
     marks2=>array(
      sub8=>50, 
      sub9=>35, 
      sub10=>70, 
      sub11=>65, 
      sub12=>75 
     ), 
     age=>'20', 
    place=>'India' 
) 
+0

排序的代碼,它不是可讀。 –

回答

0

我希望這將有助於:)

$array1 = array(name=>'JK',age=>'20',place=>'India',year=>array(marks1=>array(sub1=>50,sub3=>70,sub7=>65,sub5=>75,sub4=>35), marks2=>array(sub8=>50,sub10=>70,sub12=>75,sub9=>35,sub11=>65)); 
$array2 = array(name=>1,year=>2,age=>3,place=>4,sub1=>5,sub3=>6,sub4=>7,sub5=>8,sub7=>9,sub8=>10,sub9=>11,sub10=>12,sub11=>13,sub12=>14); 

//final array 
$final_array = array(); 
//for each value in sorting array 
foreach ($array2 as $key => $value) 
{ 
    //store result in final array 
    $final_array[$value] = $array1[$key]; 
} 
//display array for check result 
var_dump($final_array); 
0

我不完全確定要問什麼。不過,我會投籃。我認爲你正在尋找的功能是uksort

<?php 

$array1 = array(name=>'JK',age=>'20',place=>'India',year=>array(marks1=>array(sub1=>50,sub3=>70,sub7=>65,sub5=>75,sub4=>35), marks2=>array(sub8=>50,sub10=>70,sub12=>75,sub9=>35,sub11=>65))); 

function sorter($a,$b) 
{ 
    $array2 = array(name=>1,year=>2,age=>3,place=>4,sub1=>5,sub3=>6,sub4=>7,sub5=>8,sub7=>9,sub8=>10,sub9=>11,sub10=>12,sub11=>13,sub12=>14); 
    return $array2[$a] > $array2[$b]; 

} 

uksort($array1, "sorter"); 
var_dump($array1); 
?> 

Here is an example of it running on codepad。由於潛艇沒有排序,您可能需要更多的工作。但是,可能is_array可以幫助你。

0
$arr1 = array(
    'name' => 'JK', 
    'age' => 20, 
    'place' => 'India', 
    'year' => 
     array(
     'marks1' => 
      array('sub1' => 50, 
       'sub3' => 70, 
       'sub7' => 65, 
       'sub5' => 75, 
       'sub4' => 35), 
     'marks2' => 
      array('sub8' => 50, 
       'sub10' => 70, 
       'sub12' => 75, 
       'sub9' => 35, 
       'sub11' => 65))); 
$arr2 = array('name' => 1, 'year' => 2, 'age' => 3, 'place' => 4, 'sub1' => 5, 'sub3' => 6, 'sub4' => 7, 'sub5' => 8, 'sub7' => 9, 'sub8' => 10, 'sub9' => 11, 'sub10' => 12, 'sub11' => 13, 'sub12' => 14); 
foreach ($arr1['year'] as $key => &$value){ 
    uksort($value, function ($a, $b) use($arr2){ 
     return $arr2[$a] - $arr2[$b]; 
    }); 
} 
uksort($arr1, function ($a, $b) use($arr2){ 
    return $arr2[$a] - $arr2[$b]; 
}); 
print_r($arr1); 

輸出:

Array 
(
    [name] => JK 
    [year] => Array 
     (
      [marks1] => Array 
       (
        [sub1] => 50 
        [sub3] => 70 
        [sub4] => 35 
        [sub5] => 75 
        [sub7] => 65 
       ) 

      [marks2] => Array 
       (
        [sub8] => 50 
        [sub9] => 35 
        [sub10] => 70 
        [sub11] => 65 
        [sub12] => 75 
       ) 

     ) 

    [age] => 20 
    [place] => India 
)