18

I have a function and I need it to return two arrays.

I know a function can only return one variable .. is there a way to return my two arrays?

If I concatenate them, how can I separate them cleanly when out of the function?

j0k
  • 22,600
  • 28
  • 79
  • 90
lleoun
  • 477
  • 3
  • 6
  • 15
  • actually the same as the accepted answer, just with lots more explanation: http://stackoverflow.com/questions/3451906/multiple-returns-from-function#answer-3579950 – caramba Nov 23 '15 at 07:12

2 Answers2

64

No need to concatenate: just return array of two arrays, like this:

function foo() {
    return array($firstArray, $secondArray);
}

... then you will be able to assign these arrays to the local variables with list, like this:

list($firstArray, $secondArray) = foo();

And if you work with PHP 5.4, you can use array shortcut syntax here as well:

function foo54() {
    return [$firstArray, $secondArray];
}
raina77ow
  • 103,633
  • 15
  • 192
  • 229
2

I think raina77ow's answer adequately answers your question. Another option to consider is to use write parameters.

function foobar(array &$arr1 = null)
{
    if (null !== $arr1) {
        $arr1 = array(1, 2, 3);
    }

    return array(4, 5, 6);
}

Then, to call:

$arr1 = array();
$arr2 = foobar($arr1);

This won't be useful if you always need to return two arrays, but it can be used to always return one array and return the other only in certain cases.

Ja͢ck
  • 170,779
  • 38
  • 263
  • 309