如何在数组本身中使用返回的PHP数组?
我想创建一个PHP数组,其中一些元素将被函数返回的数组元素替换。例如,我想创建以下数组:如何在数组本身中使用返回的PHP数组?,php,arrays,Php,Arrays,我想创建一个PHP数组,其中一些元素将被函数返回的数组元素替换。例如,我想创建以下数组: $aArray = array( 0x01, 0x10, foo(1234), 0x03, foo(445), ... ) 这里,foo是一个返回简单PHP数组的函数。当然,我得到的是 ( [0] => 1 [1] => 16 [2] => Array ( [1] =>
$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\u merge
构造数组
注:上面的示例不是一个工作示例,只是显示了我想要做的事情。函数
foo
的内容也与此无关。您可以通过引用将此数组传递给函数,并在函数内部使用它
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);
您需要
array\u合并
单独的数组:
$aArray = array_merge(array(0x01, 0x10), foo(1234), array(0x03), foo(445));
如果在阵列中需要它,则需要在添加时或之后对其进行管理 如果要在数据可用时逐步执行此操作,则每次都可以推送到数组中。下面是一个示例,其中有两个匿名函数,每次调用时都会推送到数组中:
$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));
...
如果您想在eWards之后执行此操作,您可以执行以下操作,例如通过强制转换和合并:
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);
});
对于之后的一切,本网站上已有更多问答:
- 这是我能做的最符合您需要的事情
$aArray = array_flat(
0x01,
0x10,
foo(1234),
0x03,
foo(445)
);
下面是数组\u 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;
}
将数组传递到函数中,并获取函数以返回带有添加的values@Alex,值是否始终是整数?可能重复的
+
对于数组来说是个坏主意,因为它不会为现有的数字键添加相应的值。是的,只是查找了一下,因为我不确定这是否适用于o、 array\u merge
就是这样。而且array\u merge
不符合OP的要求(我猜正确答案是否定的,即不合并是不可能的)啊,是的,我忽略了这是一个“要求”@AlmaDoMundo:根据您的使用方式,array\u merge
确实合适,请看我编辑了您的答案,这可能在语法上更接近。请查看。