通过其他数组对PHP数组进行排序

时间:2012-06-20 15:56:37

标签: php arrays multidimensional-array

给出以下数组:

   $array = array(
        'note' => array('test', 'test1', 'test2', 'test3', 'test4'),
        'year' => array('2011','2010', '2012', '2009', '2010'),
        'type' => array('journal', 'conference', 'editorial', 'conference','conference'),
    );

如果使用以下函数更容易转换数组:

for($i=0; $i < count($array['type']); $i++)
  foreach($array as $key=> $value)
    $temp[$i][$key] = $value[$i];

print_r($temp);

我想使用以下标准对其进行排序:

  1. 数组$sortby = ('journal', 'editorial', 'conference')
  2. 按类别排序后,我想按year DESC为每个类别排序。
  3. 期望的结果:

    Array
    (
    [note] => Array
        (
            [0] => test
            [1] => test2
            [2] => test1
            [3] => test4
            [4] => test3
        )
    
    [year] => Array
        (
            [0] => 2011
            [1] => 2012
            [2] => 2010
            [3] => 2010
            [4] => 2009
        )
    
    [type] => Array
        (
            [0] => journal
            [1] => editorial
            [2] => conference
            [3] => conference
            [4] => conference
        )
    
    )
    

1 个答案:

答案 0 :(得分:2)

<?php 
$Array= array(array('note'=>'test1','year'=>'2011','type'=>'journal'),
              array('note'=>'test2','year'=>'2012','type'=>'editorial'),
              array('note'=>'test3','year'=>'2012','type'=>'conference'),
              array('note'=>'test4','year'=>'2012','type'=>'conference'),
              array('note'=>'test5','year'=>'2012','type'=>'conference'));
print_r($Array);
/*Array
(
    [0] => Array
        (
            [note] => test1
            [year] => 2011
            [type] => journal
        )

    [1] => Array
        (
            [note] => test2
            [year] => 2012
            [type] => editorial
        )

    [2] => Array
        (
            [note] => test3
            [year] => 2012
            [type] => conference
        )

    [3] => Array
        (
            [note] => test4
            [year] => 2012
            [type] => conference
        )

    [4] => Array
        (
            [note] => test5
            [year] => 2012
            [type] => conference
        )

)*/

//Lets sort them by value
function array_sort_by_column(&$arr, $col, $dir = SORT_DESC) {
    $sort_col = array();
    foreach ($arr as $key=> $row) {
        $sort_col[$key] = $row[$col];
    }
    return array_multisort($sort_col, $dir, $arr);
}

array_sort_by_column($Array, 'year');
print_r($Array);
/*Array
(
    [0] => Array
        (
            [note] => test2
            [year] => 2012
            [type] => editorial
        )

    [1] => Array
        (
            [note] => test3
            [year] => 2012
            [type] => conference
        )

    [2] => Array
        (
            [note] => test4
            [year] => 2012
            [type] => conference
        )

    [3] => Array
        (
            [note] => test5
            [year] => 2012
            [type] => conference
        )

    [4] => Array
        (
            [note] => test1
            [year] => 2011
            [type] => journal
        )

)*/


array_sort_by_column($Array, 'note');
print_r($Array);
/*
Array
(
    [0] => Array
        (
            [note] => test5
            [year] => 2012
            [type] => conference
        )

    [1] => Array
        (
            [note] => test4
            [year] => 2012
            [type] => conference
        )

    [2] => Array
        (
            [note] => test3
            [year] => 2012
            [type] => conference
        )

    [3] => Array
        (
            [note] => test2
            [year] => 2012
            [type] => editorial
        )

    [4] => Array
        (
            [note] => test1
            [year] => 2011
            [type] => journal
        )

)*/

array_sort_by_column($Array, 'type');
print_r($Array);
/*
Array
(
    [0] => Array
        (
            [note] => test1
            [year] => 2011
            [type] => journal
        )

    [1] => Array
        (
            [note] => test2
            [year] => 2012
            [type] => editorial
        )

    [2] => Array
        (
            [note] => test3
            [year] => 2012
            [type] => conference
        )

    [3] => Array
        (
            [note] => test4
            [year] => 2012
            [type] => conference
        )

    [4] => Array
        (
            [note] => test5
            [year] => 2012
            [type] => conference
        )

)

*/
?>