2014-09-29 2 views
1

У меня есть такой массив.PHP - сглаживание массива

Что такое простой способ построить результирующий массив, подобный этому, используя PHP?

Array 
(
    [0] => Array 
     (
      [category] => vegetable 
      [type] => garden 
      [name] => cabbage 
     ) 
    [1] => Array 
     (
      [category] => vegetable 
      [type] => garden 
      [name] => eggplant 
     ) 
    [2] => Array 
     (
      [category] => fruit 
      [type] => citrus 
     ) 
) 

В настоящее время я работаю над решением проблемы.

+1

возможно дубликат [Как "придавить" многомерный массив простой в PHP?] (Http://stackoverflow.com/questions/526556/how- to-flatten-a-multi-dimension-array-to-simple-one-in-php) –

+0

@MarinAtanasov Это не похоже на случай. Там не было ассоциативных массивов. –

ответ

1

Возможно, это не «красота», а просто что-то подобное?

$newArray = array();  

foreach($currentArray as $item) 
{ 
    if(!empty($item['children']) && is_array($item['children'])) 
    { 
     foreach($item['children'] as $children) 
     { 
      $newArray[] = array('category'=>$item['category'] , 'type'=>$item['type'] , 'name'=>$children['name']); 
     } 
    } 
    else 
    { 
     $newArray[] = array('category'=>$item['category'] , 'type'=>$item['type']); 
    } 
} 
+0

Это работает красиво. спасибо – Jake

1

Нужно ли вам children по вашей иерархии?

<?php 

function transform_impl($arr, $obj, &$res) { 
    $res = array(); 
    foreach ($arr as $item) { 
     $children = @$item['children']; 
     unset($item['children']); 
     $res[] = array_merge($obj, $item); 
     if ($children) { 
      transform_impl($children, array_merge($obj, $item), $res); 
     } 
    } 
} 

function transform($arr) { 
    $res = array(); 
    transform_impl($arr, array(), $res); 
    return $res; 
} 

print_r(transform(array(
    array("category" => "vegetable", "type" => "garden", "children" => 
     array(array("name" => "cabbage"), array("name" => "eggplant")) 
    ), 
    array("category" => "fruit", "type" => "citrus") 
))); 

Живая версия: http://ideone.com/0wO4wU

Смежные вопросы