dongyou2279 2014-05-28 15:17
浏览 35
已采纳

通过其值按特定键对多维关联数组进行排序是升序

I have the following array:

Array
(
[Bridge Work] => Array
    (
        [0] => Array
            (
                [Name] => NJ Trunpike_Bridge Repair Work
                [Location] => New Jersey
                [State] => New Jersey
            )

        [1] => Array
            (
                [Name] => Honoapiilani Highway Bridge Truss
                [Location] => Maui
                [State] => Hawai
            )

        [2] => Array
            (
                [Name] => BlueCross Blueshield of Tennessee (Bridge)
                [Location] => Memphis
                [State] => Tennessee
            )

        [3] => Array
            (
                [Name] => Henderson Center Connector Bridge
                [Location] => Coquitlam
                [State] => British Columbia
            )

    )

[Educational] => Array
    (
        [0] => Array
            (
                [Name] => RTI TASS Complex Admin Bldg
                [Location] => Bluffdale
                [State] => Utah
            )

        [1] => Array
            (
                [Name] => Auburn High School
                [Location] => Auburn
                [State] => Washington
            )

        [2] => Array
            (
                [Name] => Reed College
                [Location] => Portland
                [State] => Oregon
            )

        [3] => Array
            (
                [Name] => Shorewood High School
                [Location] => Shoreline
                [State] => Washington
            )

    )

)

Taking in consideration key State and its value, I want to sort it in ascending order.

Expected output:

Array
(
[Bridge Work] => Array
    (
        [0] => Array
            (
                [Name] => Henderson Center Connector Bridge
                [Location] => Coquitlam
                [State] => British Columbia
            )

        [1] => Array
            (
                [Name] => Honoapiilani Highway Bridge Truss
                [Location] => Maui
                [State] => Hawai
            )

        [2] => Array
            (
                [Name] => NJ Trunpike_Bridge Repair Work
                [Location] => New Jersey
                [State] => New Jersey
            )

        [3] => Array
            (
                [Name] => BlueCross Blueshield of Tennessee (Bridge)
                [Location] => Memphis
                [State] => Tennessee
            )

    )

[Educational] => Array
    (
        [0] => Array
            (
                [Name] => Reed College
                [Location] => Portland
                [State] => Oregon
            )

        [1] => Array
            (
                [Name] => RTI TASS Complex Admin Bldg
                [Location] => Bluffdale
                [State] => Utah
            )

        [2] => Array
            (
                [Name] => Auburn High School
                [Location] => Auburn
                [State] => Washington
            )

        [3] => Array
            (
                [Name] => Shorewood High School
                [Location] => Shoreline
                [State] => Washington
            )

    )

)

My attempts:

Using usort():

function cmp($a, $b) 
{
    return $a["State"] - $b["State"];
}

usort($project_archives, "cmp");

echo '<pre>'; print_r($project_archives);

And using a loop combined with asort():

function aasort(&$array, $key)
{
    $sorter = array();
    $ret    = array();

    reset($array);

    foreach ($array as $ii => $va) {
        $sorter[$ii] = $va[$key];
    }

    asort($sorter);

    foreach ($sorter as $ii => $va) {
        $ret[$ii] = $array[$ii];
    }

    $array = $ret;
    return $array;
}

$sort = aasort($project_archives, "State");
  • 写回答

1条回答 默认 最新

  • duanqilupinf67040 2014-05-28 15:50
    关注

    Alternatively, you could use a array_multisort() to sort those values inside the array (the child arrays) in ascending. Consider this example:

    $original_values = array( 'Bridge Work' => array( array('Name' => 'NJ Trunpike_Bridge Repair Work', 'Location' => 'New Jersey', 'State' => 'New Jersey'), array('Name' => 'Honoapiilani Highway Bridge Truss', 'Location' => 'Maui', 'State' => 'Hawaii'), array('Name' => 'BlueCross Blueshield of Tennessee (Bridge)', 'Location' => 'Memphis', 'State' => 'Tennessee'), array('Name' => 'Henderson Center Connector Bridge', 'Location' => 'Coquitlam', 'State' => 'British Columbia'), ), 'Educational' => array( array('Name' => 'RTI TASS Complex Admin Bldg', 'Location' => 'Bluffdale', 'State' => 'Utah'), array('Name' => 'Auburn High School', 'Location' => 'Auburn', 'State' => 'Washington'), array('Name' => 'Reed College', 'Location' => 'Portland', 'State' => 'Oregon'), array('Name' => 'Shorewood High School', 'Location' => 'Shoreline', 'State' => 'Washington'), ),);
    
    $sorted_values = array();
    foreach($original_values as $key => $value) {
        $columns = null;
        foreach ($value as $index => $element) {
            $columns[] = $element['State'];
        }
        $temp = $value;
        array_multisort($columns, SORT_ASC, $temp);
        $sorted_values[$key] = $temp;
    }
    
    echo '<pre>';
    print_r($sorted_values);
    echo '</pre>';
    

    Sample Code

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥15 如何修改pca中的feature函数
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况