1

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.

2
  • FYI, array is a reserved word in PHP, and it's probably best not using it as a variable name. Commented Oct 22, 2010 at 2:25
  • You're re-using the $ID variable. Don't do that. Commented Oct 22, 2010 at 4:48

3 Answers 3

2

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');
3
  • 1
    Sorry, I commented on your code before you edited it. The updated version is correct. Commented Oct 22, 2010 at 2:20
  • Not true: cl.ly/ad4a1bf86ce85c39aff4 - You edited it 3minutes after my comment. Commented Oct 22, 2010 at 2:24
  • I blame the slacky servers then, since I didn't see any updates ;) Sorry Commented Oct 22, 2010 at 2:29
0

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);
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;
      }
   }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.