PHP цикл по массиву со строками и массивом внутри - PullRequest
1 голос
/ 22 октября 2010

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

Я пытаюсь получить результаты из массива $ 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-го уровня вложенных массивов.

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

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

Ответы [ 3 ]

2 голосов
/ 22 октября 2010

Вы можете использовать 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 голосов
/ 22 октября 2010
foreach ($testoutput as $key1 => $value1) {
   foreach ($value1 as $key2 => $value2) {
      if(is_array($value2))
      {
              foreach ($value2 as $key3 => $value3) {
                          echo $value3;
              }
      }
      else
      {
              echo $value2;
      }
   }
}
0 голосов
/ 22 октября 2010

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

/** 
 * 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);
...