-1

アルファベット順とサイズ順の両方でソートしようとしている多次元連想配列があります。現在取得している例を確認してください。ただし、意味がある場合は、サイズの並べ替えを編集せずに、キー「ACC、ABB、AAB」をアルファベット順に並べ替えたいと考えています。

arsort($myarray);

// Returns an array sorted by its value size from biggest to smallest but need to to also sort it keys alpabetically without amongest keys that have the same size.

$myArray = Array (     <--- Arrange this alphabetically and by size
        [AAA] => Array ( is 1st
            [1] => 1
            [2] => 1
            [3] => 1 
            [4] => 1
        )      
        [ACC] => Array ( should be 3rd
            [1] => 1 
            [2] => 1 
        )      
        [ABB] => Array ( should be 2nd
            [1] => 1
            [2] => 1 
        )      
        [AAB] => Array ( should be 1st
            [1] => 1 
            [2] => 1 
        )      
        [AA] => Array ( is 1st
            [1] => 1 
        )      
        [AB] => Array ( is 2nd
            [1] => 1 
        ) 
    )
4

2 に答える 2

1

キーの並べ替えを使用して、配列を並べ替えます。あなたの要件に従って、キーに基づいて配列をソートしたい これはあなたのために働くでしょう...

ksort($myArray);

そして、サイズでソートするとはどういう意味ですか?? 質問の 2 番目の部分がわかりませんでした

于 2013-02-06T07:15:03.037 に答える
0

結局、私はただの組み込み関数以上のものを望んでいたことに対してループを実行させました。その理解できることを願っています私はコードを説明するのがかなり苦手です:S

arsort($myArray);                                     // Sorts array by size
reset($myArray);
$first_key = key($myArray);
$count = count($myArray[$first_key], COUNT_RECURSIVE); // Get the largest value in array

$temp_array = array();
$sorted_array = array();
for($i = $count; $i >= 1; $i--){                      // Loops from the largest value to the smallest to create temp array for each size
    foreach($myArray as $name => $values){            // Loops Through $myArray
        if(count($myArray [$name]) == $i){            // Checks each Key in $myArray to see if size is the same as $I
            $temp_array[$name] = $myArray[$name];     // Adds to $temp_array
        }

    }
    ksort($temp_array);                               // Sorts temp array created in loop above alpahbetically
    $sorted_array += $temp_array;                     // and adds its to a new array
    $temp_array = array();
}

このループを使用すると、配列値のサイズで並べ替えることができます。同じ値のキーが複数ある場合は、それらをアルファベット順に並べ替えます。

$myArray = Array (    // This array sorted by size only - arsort($myArray)
    [AB] => Array (
        [1] => 1
        [2] => 1
        [3] => 1 
    )      
    [AA] => Array (
        [1] => 1 
        [2] => 1
        [3] => 1 
    )
    [AC] => Array (
        [1] => 1 
        [2] => 1
        [3] => 1 
    )      
    [BB] => Array (
        [1] => 1
        [2] => 1 
    )      
    [BA] => Array (
        [1] => 1 
        [2] => 1 
    )      
    [CA] => Array (
        [1] => 1 
    )      
    [CB] => Array (
        [1] => 1 
    ) 
)

$myArray = Array (     // Array Sorted By Size and Alphabetically - After loop
    [AA] => Array (
        [1] => 1
        [2] => 1
        [3] => 1 
    )      
    [AB] => Array (
        [1] => 1 
        [2] => 1
        [3] => 1 
    ) 
    [AC] => Array (
        [1] => 1 
        [2] => 1
        [3] => 1 
    )      
    [BA] => Array (
        [1] => 1
        [2] => 1 
    )      
    [BB] => Array (
        [1] => 1 
        [2] => 1 
    )      
    [CA] => Array (
        [1] => 1 
    )      
    [CB] => Array (
        [1] => 1 
    ) 
)
于 2013-02-06T23:50:52.083 に答える