2016-12-14 7 views
2

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

$array = array(
    "foo" => "bar", 
    42 => 24, 
    "multi" => array(
      "dimensional" => array(
      "array" => "foo", 
      "something" => 42, 
      "something2" => [1,2,3] 
     ) 
    ) 
); 

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

$array = array(
    "foo" => "bar", 
    "multi" => array(
      "dimensional" => array(
      "array" => "foo" 
     ) 
    ) 
); 

На данный момент я пытаюсь использовать рецидивирующий функцию

$this->printAll($array); 

public function printAll($a) 
    { 
     if (!is_array($a)) { 
      echo $a, ' <br>'; // here we can check if it is string and add to the final array 
      return; 
     } 

     foreach($a as $i=>$v) { 
      $this->printAll($v); 
      echo $i; 
     } 
    } 

Может кто-то помочь мне понять, как сохранить индексы через итерации и положить это в конечном массиве.

+0

, как долго они могут получить массив? –

ответ

1
<?php 

function printAll($array, &$save) 
{ 
    foreach ($array as $key => $values) 
    { 
     if (! is_numeric($values)) 
     { 
      if (is_array($values)) 
      { 
       printAll($values, $save[$key]); 
      } 
      else 
      { 
       $save[$key] = $values; 
      } 
     } 
    } 
    if (! empty($save)) { 
     $save = array_filter($save); 
    } 
} 

$array = array(
    "foo" => "bar", 
    42 => 24, 
    "multi" => array(
      "dimensional" => array(
      "array" => "foo", 
      "something" => 42, 
      "something2" => [1,2,3] 
     ) 
    ) 
); 

$save = array(); 
printAll($array, $save); 

print_r($save); 

Выходы: PHP

Array (
    [foo] => bar 
    [multi] => Array ( 
     [dimensional] => Array ( 
       [array] => foo 
))) 
+0

Спасибо, он отлично работает! – user2840278

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