Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

This is a basic looping question but with a twist, so it's likely that i'm missing something easy - apologies in advance...

I'm trying to pull the results from an array $testoutput - which is filled with 3 arrays:

Running the following code:

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

Returns:

ARRAY
ARRAY
ARRAY

Adding a second nested loop with the following code:

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

Results in:

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

I'm fine with retuning all of the above strings, however, I can't figure out how to return the values from the 3rd-level of nested Arrays.

Is there an easy way to do this?

Many thanks in advance.

share|improve this question
    
FYI, array is a reserved word in PHP, and it's probably best not using it as a variable name. –  mellowsoon Oct 22 '10 at 2:25
    
You're re-using the $ID variable. Don't do that. –  staticsan Oct 22 '10 at 4:48

3 Answers 3

foreach ($testoutput as $key1 => $value1) {
   foreach ($value1 as $key2 => $value2) {
      if(is_array($value2))
      {
              foreach ($value2 as $key3 => $value3) {
                          echo $value3;
              }
      }
      else
      {
              echo $value2;
      }
   }
}
share|improve this answer

You can use 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);   

Or if you prefer, you can use array_walk_recursive:

function output(&$value, $index) {
    echo $value;
}
array_walk_recursive($testoutput, 'output');
share|improve this answer
    
This doesn't appear to solve his nested array problem. –  ArtBIT Oct 22 '10 at 2:15
    
@ArtBIT, How is that? –  Jacob Relkin Oct 22 '10 at 2:18
    
Sorry, I commented on your code before you edited it. The updated version is correct. –  ArtBIT Oct 22 '10 at 2:20
    
@ArtBIT, I edited it like 20 minutes ago, haha. –  Jacob Relkin Oct 22 '10 at 2:21
1  
@ArtBIT, look at the edit. stackoverflow.com/posts/3993346/revisions –  Jacob Relkin Oct 22 '10 at 2:27

Try this:

/** 
 * 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);
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.