0

给定以下数组:

   $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对每个类别进行排序。

期望的结果:

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
    )

)
4

1 回答 1

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
        )

)

*/
?>
于 2012-06-20T16:14:01.257 回答