2010-08-18 27 views
1

我從中翻出所有子類別和相關信息數據庫此數據來:如何實現返回嵌套數組的自定義重組函數?

$data = array(
    array(
     'destination_name' => 'Ohio Resort', 
     'destination_slug' => 'ohio', 
     'subcategory_name' => 'Bird Hunting', 
     'subcategory_slug' => 'bird-hunting', 
     'category_name' => 'Hunting', 
     'category_slug' => 'hunting', 
    ), 
    array(
     'destination_name' => 'Ohio Resort', 
     'destination_slug' => 'ohio', 
     'subcategory_name' => 'Bear Hunting', 
     'subcategory_slug' => 'bear-hunting', 
     'category_name' => 'Hunting', 
     'category_slug' => 'hunting', 
    ), 
    array(
     'destination_name' => 'Maryland Resort', 
     'destination_slug' => 'maryland', 
     'subcategory_name' => 'Bird Hunting', 
     'subcategory_slug' => 'bird-hunting', 
     'category_name' => 'Hunting', 
     'category_slug' => 'hunting', 
    ), 
    array(
     'destination_name' => 'Cali Resort', 
     'destination_slug' => 'california', 
     'subcategory_name' => 'Sledding', 
     'subcategory_slug' => 'sledding', 
     'category_name' => 'Winter Sports', 
     'category_slug' => 'winter-sports', 
    ), 
); 

我生成XML這個問題,但我需要根據我的具體需求來重新排序。比方說,我指定functionCall($data, array('destination', 'category', 'subcategory'));

我希望它返回它以這種形式:

Array(
    [california] => array(
     [_name] => 'California', 
     [winter-sports] => array(
     '_name' => 'Winter Sports', 
     [0] => array(
      subcategory_name => Sledding, 
      subcategory_slug => sledding 
     ) 
    ) 
    ), 
    [maryland] => array(  
     [_name] => 'Maryland', 
     [hunting] => array(
     '_name' => 'Hunting', 
     [0] => array(
      subcategory_name => Bird Hunting, 
      subcategory_slug => bird hunting 
     ) 
    ) 
    ), 
    [ohio] => array(
     [_name] => 'Ohio', 
     [hunting] => array(
     '_name' => 'Hunting', 
     [0] => array(
      subcategory_name => Bird Hunting, 
      subcategory_slug => bird-hunting 
     ), 
     [1] => array(
      subcategory_name => Bear Hunting, 
      subcategory_slug => bear-hunting 
     ) 
    ) 
    ), 

); 

如果我指定functionCall($data, array('category', 'subcategory'));我想它返回:

Array(
      [winter-sports] => array(
      '_name' => 'Winter Sports', 
      [0] => array(
       subcategory_name => Sledding, 
       subcategory_slug => sledding 
      ) 
     ), 

      [hunting] => array(
      '_name' => 'Hunting', 
      [0] => array(
       subcategory_name => Bird Hunting, 
       subcategory_slug => bird hunting 
      ), 
      [1] => array(
       subcategory_name => Bear Hunting, 
       subcategory_slug => bear-hunting 
      ) 
     ) 
); 

有人能提供創造一些指針函數將數據作爲第一個參數,並將層次嵌套作爲第二個參數,並以適當的格式返回它?

到目前爲止,我做手工重組:

$data = array(); 
foreach($categories as $res) { 
    $destinationSlug = $res['destination_slug']; 
    $destinationName = $res['destination_name']; 
    $categorySlug = $res['category_slug']; 
    $categoryName = $res['category_name']; 
    if (!in_array($destinationSlug, array_keys($data))) { 
    $data[ $destinationSlug ] = array(); 
    $data[ $destinationSlug ]['_name'] = $destinationName; 
    } 
    if (!in_array($categorySlug, array_keys($data[ $destinationSlug ]))) { 
    $data[ $destinationSlug ][ $categorySlug ] = array(); 
    $data[ $destinationSlug ][ $categorySlug ]['_name'] = $categoryName; 
    } 
    $data[ $destinationSlug ][ $categorySlug ][] = array(
    'subcategory_slug' => $res['subcategory_slug'], 
    'subcategory_name' => $res['subcategory_name'], 
    ); 
} 
return $data; 

散記:

  • 數據將始終是這種格式。總會有一個_slug_name對。
  • 我需要有能力字母順序排序結果

回答

0

你可以使用uasort這允許用戶自定義函數中使用排序的陣列,。但我會建議有自己的功能做到這一點,

+0

我沒有downvote,fyi。 – 2010-08-18 17:43:56

+0

誰做了誰可能不明白我的答案,應該已經評論了背後downvote的原因。不管怎麼說,我認爲你應該實現你自己的功能,。這將是一個更清潔的方法 – 2010-08-18 17:46:49

+0

嗯,我不明白如何uasort()可以解決「大問題」。 – VolkerK 2010-08-18 17:55:07