我想创建一个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
的内容也无关紧要。
答案 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);
});
对于之后的所有内容,此网站上已存在更多问答: