2013-07-25 2 views
0

Мне нужно отсортировать массив на основе другого значения сортировки массива.нужен soting многомерный массив на основе другого порядка отображения массива

Actual массив: 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 
) 
Смежные вопросы