0

一部の要素が関数によって返される配列の要素に置き換えられる 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ですか?

PS:上記の例は実際の例ではなく、私がやりたいことを示しているだけです。関数の内容fooも無関係です。

4

4 に答える 4

0

配列でそれが必要な場合は、追加時または後でそれを管理する必要があります。

データが利用可能になったときにこれを段階的に実行する場合は、毎回アレイにプッシュできます。以下は、呼び出されるたびに配列にプッシュされる 2 つの無名関数の例です。

$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));

もう1つは、後で配列を減らすことです。これは、より適切に理解しやすいものです。

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

その後のすべてについて、このウェブサイトにはすでに多くの Q&A があります。

于 2013-08-28T10:26:17.607 に答える
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);
于 2013-08-28T10:21:35.200 に答える
0

array_merge別の配列が必要になります。

$aArray = array_merge(array(0x01, 0x10), foo(1234), array(0x03), foo(445));
于 2013-08-28T10:21:41.870 に答える