2010-10-22 2 views
1

Это основной вопрос, перекручивание, но с изюминкой, поэтому вполне вероятно, что я что-то легко хватает - извинения заранее ...PHP Looping через массив строк и массив внутри

Пытаюсь чтобы вытащить результаты из массива $ testoutput - который заполнен 3 массивов:

Идущих следующий код:

foreach ($testoutput as $ID => $Array) { 
    echo $Array . "<BR>"; 
} 

возвращений:

ARRAY 
ARRAY 
ARRAY 

Добавление второго вложенного цикла с помощью следующего кода:

foreach ($testoutput as $ID => $Array) { 
    foreach ($Array as $ID => $L1item) { 
     echo $L1item . "<BR>"; 
    } 
} 

Результаты в:

String1a 
String1b 
String1c 
ARRAY 
String2a 
String2b 
String2c 
ARRAY 
String3a 
String3b 
String3c 
ARRAY 

Я в порядке с перенастройки всех вышеперечисленных строк, однако, я не могу понять как вернуть значения из 3-го уровня вложенных массивов.

Есть ли простой способ сделать это?

Большое спасибо заранее.

+0

FYI, массив является зарезервированным слово в PHP, и это, вероятно, лучше всего не используя его как имя переменной. – mellowsoon

+0

Вы повторно используете переменную '$ ID'. Не делай этого. – staticsan

ответ

2

Вы можете использовать array_map

$testoutput = array('x', array('y', 'z', array('1', '2', '3'))); 
function output($element) { 
    if(is_array($element)) { 
     array_map('output', $element); //RECURSION 
     return; 
    } 
    echo $element; 
} 
array_map('output', $testoutput); 

Или, если вы предпочитаете, вы можете использовать array_walk_recursive:

function output(&$value, $index) { 
    echo $value; 
} 
array_walk_recursive($testoutput, 'output'); 
+0

Это, похоже, не решает проблему его вложенного массива. – ArtBIT

+0

@ArtBIT, Как это? –

+1

Прошу прокомментировать код перед тем, как вы его отредактировали. Обновленная версия верна. – ArtBIT

0

Попробуйте это:

/** 
* array nested_array_map(callback $callback, array $array) 
* Warning - doesn't check for recursion, 
*   therefore child arrays shouldn't contain references to any of parent level arrays 
* 
* @param $callback, function 
* @param $array, array of elements to map the function to 
* @return array 
*/ 
function nested_array_map($callback, $param) { 
    if (!is_array($param)) { 
     return call_user_func($callback, $param); 
    } 

    $result = array(); 
    foreach ($param as $index => $value) { 
     $result[$index] = nested_array_map($callback, $value); 
    } 
    return $result; 
} 

function echo_value($value) { 
    echo "$value\n"; 
    return $value; 
} 

$test = array(
    '1st level' 
    ,array(
     '2nd level' 
     ,array(
      '3rd level' 
     ) 
     ,'2nd level' 
    ) 
    ,array(
     '2nd level' 
    ) 
    ,'1st level' 
); 

$result = nested_array_map('echo_value', $test); 
0
foreach ($testoutput as $key1 => $value1) { 
    foreach ($value1 as $key2 => $value2) { 
     if(is_array($value2)) 
     { 
       foreach ($value2 as $key3 => $value3) { 
          echo $value3; 
       } 
     } 
     else 
     { 
       echo $value2; 
     } 
    } 
} 
Смежные вопросы