如何在数组本身中使用返回的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] =>

我想创建一个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\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
      确实合适,请看我编辑了您的答案,这可能在语法上更接近。请查看。