2015-10-21 3 views
-2

У меня есть входной массив так:Анализировать массив, чтобы получить необходимые данные

Array 
(
    [one] => one 
    [two] => two 
    [group1] => Array 
     (
      [three] => three 
      [four] => four 
      [group2] => Array 
       (
        [five] => five 
       ) 

     ) 

    [group3] => Array 
     (
      [six] => six 
     ) 

) 

Я хочу, чтобы извлечь следующие 6 строк из массива выше:

Array 
(
    [0] => one 
    [1] => two 
    [2] => group1,three 
    [3] => group1,four 
    [4] => group1,group2,five 
    [5] => group3,six 
) 

Любая идея? Есть ли какая-нибудь полезная функция PHP для этого?

Я пытался что-то вроде этого:

function getStrings($data, &$result, $parent = '') { 

    foreach($data as $key => $value) { 

     if(is_array($value)) { 

      getStrings($value, $result, $key); 

     } else { 

      if($parent == '') { 
       $result[] = $value; 
      } else { 
       $result[] = $parent . ',' . $value; 
      } 
     } 
    } 

} 

$tree = array(); 
getStrings($input, $tree); 
print_r($tree); 

Результат:

Array 
(
    [0] => one 
    [1] => two 
    [2] => group1,three 
    [3] => group1,four 
    [4] => group2,five 
    [5] => group3,six 
) 
+1

попробовать с помощью вложенной для цикла –

+0

Любой код, что вы привязанную раньше? – Pred

+0

[Что вы пробовали?] (Http://mattgemmell.com/what-have-you-tried/) – Epodax

ответ

1

Согласно вашей структуре данных, которая является:

$data = [ 
    'one' => 'one', 
    'two' => 'two', 
    'group1' => [ 
     'three' => 'three', 
     'four' => 'four', 
     'group2' => ['five'] 
    ], 
    'group3' => ['six' => 'six'] 
]; 

Вы можете использовать рекурсивную функцию:

function make_implode($data){ 
    $rows = []; 
    foreach($data as $key => $val) { 
     if(is_array($val)) { 
      //$rows[] = $key; 
      $nestedData = make_implode($val); 
      if(is_array($nestedData)){ 
       foreach($nestedData as $keyNested => $valNested) { 
        $rows[] = $key.','.$valNested; 
       } 
      } else { 
       $rows[] = $key.','.$nestedData; 
      } 

     } else { 
      $rows[] = $val; 
     } 
    } 

    return $rows; 
} 

$data = make_implode($data); 
echo '<pre>'.print_r($data,1).'</pre>'; 


    //prints 
Array 
(
    [0] => one 
    [1] => two 
    [2] => group1,three 
    [3] => group1,four 
    [4] => group1,group2,five 
    [5] => group3,six 
) 
+0

Спасибо за ваши усилия. – Awan

1

использовать рекурсивную функцию, аналогичную:

$a = array("one"=>"one","group1"=>array("three"=>"three")); 
var_dump($a); 
function recFor($a) { 
    foreach($a as $k => $v) { 
     if(is_array($v)) { 
      $tmp= recFor($v); 
      $res[] = $tmp[0]; 
     } else { 
      $res[] = $v; 
     } 
    } 
    return $res; 
} 
$b = recFor($a); 
var_dump($b); 

Это просто быстрый и грязный пример , но вы должны получить эту идею.

+0

Спасибо за ваш ответ. – Awan

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