需要根据另一个数组显示顺序来投放多维数组

时间:2013-07-25 13:18:16

标签: php sorting

我需要根据另一个数组排序值对数组进行排序。

实际数组: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'
)

3 个答案:

答案 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);

答案 1 :(得分: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可以帮助你。

答案 2 :(得分: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
)
相关问题