0

私は2つの配列を持っています:

Array 1
(
    [0] => 976504282322
    [1] => 976530000022
)

=====

Array 2
(
    [0]  => Array
        (
            [Mobile]  => 978504282398
            [Name]  => Mike 
        )
    [1] => Array
        (
            [Mobile]  => 976504282300
            [Name]  => Jhon
        )
) 

====

それらをマージしたいのですが、最終結果は次のようになります。

===

Array3
(
    [0] => Array
        (
            [Mobile]  => 978504282398
            [Name]  => Mike 
        )

    [1] => Array
        (
            [Mobile]  => 976504282300
            [Name]  => Jhon
        )

    [2] => Array
        (
            [Mobile]  => 976504282322

        )

   [3] => Array
        (
            [Mobile]  => 976504282322

        )


)

注 : 各配列には 200,000 を超える項目があるため、ここではパフォーマンスが非常に重要です。そのため、for ループを使用することはお勧めできません。

私のコード:

foreach ($Array1 as $mobile=> $value) {
    $Array2[]['Mobile']=$value;
}
4

4 に答える 4

3

ここにワンライナーがあります:

$a = array(1,2,3);

$b = array(array('Mobile' => 1, 'name' => 'Mike'));

var_dump(
    array_merge($b, array_map(function($i) { return array('Mobile' => $i); }, $a))
);

PS: ループが明示的に表示されていなくても、php は内部でループを実行します。

forPPS: 個人的には、単純な基本ソリューションを比較するパフォーマンス テストを作成します。そして、私はそれがより良くなると確信しています(そして間違いなくメモリの消費量が少なくなります)

于 2013-05-12T11:20:45.200 に答える
2

なぜArray_Mergeではないのですか? 特にそのようなタスクでは、複数の配列をマージします。しかし、あなたは保存する必要があります

Array 1
(
    [0] => 976504282322
    [1] => 976530000022
)

なので

Array 1
(
    [0] => array('Mobile'=>976504282322)
    [1] => array('Mobile'=>976530000022)
)

これでマージの準備が整いました。とにかく、200k配列をループするよりも高速です。配列のインデックス付けを気にしない場合は、試すこともできます

$arr = $arr + $arr2; // appending
于 2013-05-12T11:14:11.643 に答える
1

この機能を試してください:

function my_array_merge() {
    $new = array();
    foreach (func_get_args() as $arr) {
        foreach ($arr as $item) {
            if (!is_array($item)) {
                $item = array('Mobile' => $item);
            }
            $new[] = $item;
        }
    }
    return $new;
}

例:

$arr1 = array(
    '976504282322',
    '976530000022',
);
$arr2 = array(
    array(
        'Mobile' => '978504282398',
        'Name'   => 'Mike',
    ),
    array(
        'Mobile' => '976504282300',
        'Name'   => 'John',
    ),
);
print_r(my_array_merge($arr2,$arr1));
于 2013-05-12T11:22:46.040 に答える