0

重複の可能性:
PHPでの連想配列の
並べ替えPHPでの多次元配列の並べ替え?

配列の並べ替えに問題があります...(サブ)カテゴリとアイテムを含む配列がありますが、並べ替えることができません...

アレイは通常、次のようになります。

array
  'Professional Services Applications' => 
    array
      'Specialized Technologies' => 
        array
          'Test Michiel, part 2' => 
            array
              0 => string '2071' (length=4)
      'JAVA' => 
        array
          'Senior Apple Engineer' => 
            array
              0 => string '2067' (length=4)
          'Junior Apple Engineer' => 
            array
              0 => string '2069' (length=4)
      'Microsoft' => 
        array
          'Senior ECM Consultant' => 
            array
              0 => string '2059' (length=4)
          'Junior ECM Consultant' => 
            array
              0 => string '2082' (length=4)
  'Business Applications' => 
    array
      '' => 
        array
          'Business Analyst' => 
            array
              0 => string '2053' (length=4)
          'Test business dingen ' => 
            array
              0 => string '2062' (length=4)
  'acADDemICT' => 
    array
      '' => 
        array
          'Test Michiel 

明確にするために
、カテゴリは次のとおりです。プロフェッショナルサービスアプリケーションビジネスアプリケーション、およびacADDemICT
サブカテゴリは、SpecializedTechnologiesJAVA、およびMicrosoft です(サブカテゴリがないものもあります)。

このPHPコードを使用してこの配列をループします。

foreach ($job_list as $category => $subcategory) {
    $page .=  '<h2>' . $category .'</h2>';

    foreach ($subcategory as $name => $values) {
        if (!empty($name)) {
        $page .= '<h3>' . $name . '</h3>';
        }

        foreach ($values as $vacancy => $link) {
        $page .= '<li>' . l("$vacancy", "node/$link[0]") . '</li>';
        }   
    }
}

sort()さまざまな種類の並べ替え関数( 、、、、 ...)asort()を試しましksort()たが、正しい結果が得られませんでした。

カテゴリ、サブカテゴリ、アイテムのアルファベット順を目指しています...

したがって、私の理想的な結果は次のようになります。

**aCCademICT:**  
    - Test Michiel  
**Business Applications:**  
    - Business Analyst  
    - Test business  
**Professional Services Applications:**  
   *JAVA*  
    - Junior Apple Engineer  
    - Senior Apple Enineer  
   *Microsoft*  
    - Junior ECM Consultant  
    - Senior ECM Consultant     
   *Specialize Technologies*  
    - Test Michiel, part 2  

更新:
これが私のprint_r

Array ([Professional Services Applications] => Array ( [Specialized Technologies] => Array ( [Test van Michiel, part 2 ] => Array ( [0] => 2071 ) ) [JAVA] => Array ( [Senior Apple Engineer ] => Array ( [0] => 2067 ) ) [Microsoft] => Array ( [Junior ECM Consultant ] => Array ( [0] => 2059 ) [Senior ECM Consultant] => Array ( [0] => 2087 )) ) [acADDemICT] => Array ( [] => Array ( [Test van Michiel ] => Array ( [0] => 2063 ) ) ) [Business Applications] => Array ( [] => Array ( [Business Analyst ] => Array ( [0] => 2053 ) [Test business dingen ] => Array ( [0] => 2062 ) ) ) )
4

2 に答える 2

1

各配列をウォークスルーし、要素自体が配列である場合はそれを並べ替え、元の配列を並べ替える再帰関数を作成する必要があります。

擬似コード:

function mysort($array) {
  foreach ($array as $key=>$value) {
    if (is_array($value)) $array[$key] = mysort($value);
  }
  sort($array);
  return $array;
}
于 2012-04-11T09:59:44.883 に答える
1

ソートするキーのレベルが 3 つあるため、ksort多次元配列のすべての 2 レベルに適用する必要があります。

$array = array(
    'Category Z' => array(
        'Category Z - Z' => array(
            'Category Z - Z - Z' => array('2701'),
            'Category Z - Z - X' => array('2601'),
        )
    ),
    'Category A' => array(
        'Category A - A' => array(
            'Category A - A - A' => array('2200'),
        )
    ),
);

$ksort = function($array) use (&$ksort) {
    if (!is_array($array)) return $array;
    ksort($array);
    return array_map($ksort, $array);
};

$array = $ksort($array);

print_r($array);

出力:

Array
(
    [Category A] => Array
        (
            [Category A - A] => Array
                (
                    [Category A - A - A] => Array
                        (
                            [0] => 2200
                        )

                )

        )

    [Category Z] => Array
        (
            [Category Z - Z] => Array
                (
                    [Category Z - Z - X] => Array
                        (
                            [0] => 2601
                        )

                    [Category Z - Z - Z] => Array
                        (
                            [0] => 2701
                        )

                )

        )

)
于 2012-04-11T10:04:26.497 に答える