如何在数组本身内使用返回的PHP数组?

时间:2013-08-28 10:16:53

标签: php arrays

我想创建一个PHP数组,其中一些元素将被函数返回的数组元素替换。例如,我想创建以下数组:

$aArray = array(
    0x01, 
    0x10, 
    foo(1234), 
    0x03, 
    foo(445), 
    ...
)

这里,foo是一个返回简单PHP数组的函数。我得到的当然是像

(
    [0] => 1
    [1] => 16
    [2] => Array
       (
         [1] => 2
         [2] => 4
       )
    [3] => 03
    [4] => Array
      ....

但我真正想做的是将函数的返回值直接包含到数组中,以创建类似于:  (         [0] => 1         [1] => 16         [2] => 2         [3] => 4         [4] => 03         [5] => 3           ....

这是否可以通过简单的方式完成,而无需使用array_merge构建数组?

P.S:上面的例子不是一个有效的例子,只是展示了我想做的事情。函数foo的内容也无关紧要。

4 个答案:

答案 0 :(得分:1)

这是我能做的最接近你需要的事情

$aArray = array_flat(
    0x01, 
    0x10, 
    foo(1234), 
    0x03, 
    foo(445)
);

以下是array_flat的代码。

function array_flat()
{
    $array  = func_get_args()
    $result = array();
    foreach ($array as $value) {
        is_array($value) || $value = array($value);                   
        foreach ($value as $dvalue) {
            $result[] = $dvalue;
        }
    }

    return $result;
}

答案 1 :(得分:0)

您可以通过引用将此数组传递给函数,并在函数内部执行该操作。

public function test(&$arr) {
    $arr[] = 1234;
}

$arr = array(1, 2, 3);
test($arr);

print_r($arr); // array(1, 2, 3, 1234);

或者您可以删除引用并从函数中正常返回数组:

public function test($arr) {
    $arr[] = 1234;
    return $arr;
}

$arr = array(1, 2, 3);
$arr = test($arr);

print_r($arr); // array(1, 2, 3, 1234);

答案 2 :(得分:0)

您需要array_merge单独的数组:

$aArray = array_merge(array(0x01, 0x10), foo(1234), array(0x03), foo(445));

答案 3 :(得分:0)

如果你需要在数组中使用它,你需要在添加或之后管理它。

如果您想在数据可用时一步一步地执行此操作,则可以每次都推送到阵列。下面是一个示例,其中包含两个匿名函数,每次调用时都会进入您的数组:

$pushArray = function(&$array) {
    return function($item) use (&$array) {
        is_array($item) || $item = array($item);
        foreach($item as $value) {
            $array[] = $value;
        }
    };
}

$array = array();
$push = $pushArray($array);
$push(0x01);
$push(0x10);
$push(foo(1234));
...

如果你想做到这一点,你可以这样做,例如使用强制转换和合并:

function arrayval($mixed) {
    settype($mixed, 'array');
    return $mixed;
}

$flat = call_user_func_array('array_merge', array_map('arrayval', $array));

另一种方法是稍后通过减少数组来更容易理解:

$flat = array_reduce($array, function($result, $item) {
    return array_merge((array) $result, (array) $item);
});

对于之后的所有内容,此网站上已存在更多问答: