对特定键的多维关联数组按其值升序排序



我有以下数组:

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
            )
    )
)

考虑到key State及其value,我想按升序排序。

预期输出:

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
            )
    )
)
我尝试

:

使用usort():

function cmp($a, $b) 
{
    return $a["State"] - $b["State"];
}
usort($project_archives, "cmp");
echo '<pre>'; print_r($project_archives);

和使用与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");

或者,您可以使用array_multisort()对数组(子数组)中的这些值按升序排序。考虑这个例子:

$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>';
样例代码

相关内容

  • 没有找到相关文章