Nasıl bir iç içe geçmiş bir dizi döndüren bir özel reorganizasyon işlevi uygulayabilirsiniz?

0 Cevap php

Bu veriler tüm alt ve ilgili bilgi çeker bir veritabanından gelen var:

$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',
    ),
);

Ben bu ile xml üreten duyuyorum, ama benim özel ihtiyaçlarına göre yeniden düzenlemek gerekir. Diyelim ki belirtmek diyelim functionCall( $data, array('destination', 'category', 'subcategory') );

Ben bu formda dönmek istiyorum:

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

);

Ben belirtirseniz functionCall( $data, array('category', 'subcategory') ); Ben geri dönmek istiyorum:

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

Birisi ikinci argüman olarak ilk argüman ve seviye-yuvalama verileri alır ve uygun formatta döndürür işlevi oluşturma konusunda bazı öneriler sunabilir?

Şimdiye kadar elle reorganizasyon yapıyorum:

$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;

Rastgele notlar:

  • Veri always bu formatta olacaktır. Orada her zaman bir _slug olması ve _name çifti olacak.
  • Ben alfabetik sonuçları sipariş yeteneği olması gerekir

0 Cevap