ホームページ >バックエンド開発 >PHPチュートリアル >PHP での array_merge 関数の詳細な使用法 (例付き)

PHP での array_merge 関数の詳細な使用法 (例付き)

不言
不言転載
2019-01-16 10:16:468336ブラウズ

この記事では、PHP の array_merge 関数の詳細な使用法 (例付き) を紹介します。これには一定の参考値があります。必要な友人は参照できます。お役に立てば幸いです。

array_merge この関数は非常に実用的でよく使われますが、注意しないと問題を引き起こす可能性のあるいくつかの機能があります。数日前に同僚のコードを修正していたときにこの問題が発生したので、いくつかの情報を調べて書き留めました。

定義と構文

array array_merge (array $array1 [, array $...])
1 つ以上の配列をマージします。
入力配列に同じ文字列キー名がある場合、キー名の後の値で前の値が上書きされます。ただし、配列に数値キーが含まれている場合、後続の値は元の値を上書きせず、追加されます。

構文は単純で、戻り値は結合された配列になります (期待する戻り値が得られるとは限りません)。

<?php

// 索引数组
$arr1 = array(0 => 'apple', 1 => 'banana');
$arr2 = array(1 => 'pear', 2 => 'orange');
$arr3 = array('pitaya' => '火龙果');
print_r(array_merge($arr1, $arr2));//  array_merge会重建索引 Array ( [0] => apple [1] => banana [2] => pear [3] => orange )
echo '<br />';
print_r(array_merge($arr1, $arr2, $arr3));// 索引数组和关联数组合并 Array ( [0] => apple [1] => banana [2] => pear [3] => orange [pitaya] => 火龙果 )
echo '<br />';
// 索引数组不会覆盖,但是使用 + 的话,前面的值会覆盖后面相同索引的值
print_r($arr1 + $arr2);// Array ( [0] => apple [1] => banana [2] => orange )
echo '<br />';

// 关联数组
$arr1 = array('apple' => '苹果', 'banana' => '香蕉');
$arr2 = array('apple' => '黄元帅苹果', 'orange' => '橙子');
print_r(array_merge($arr1, $arr2));//  Array ( [apple] => 黄元帅苹果 [banana] => 香蕉 [orange] => 橙子 )
echo '<br />';
// 后面的值会覆盖前面相同key的值,而使用 + 则正好相反,前面的值会覆盖后面的值
print_r($arr1 + $arr2);// Array ( [apple] => 苹果 [banana] => 香蕉 [orange] => 橙子 )

落とし穴を埋める

それでは、array_merge のいわゆる落とし穴とは何でしょうか?
実際の使用では、フレームワークを使用してデータベースのデータをクエリし、返されるのは 2 次元配列または 1 次元配列です。ただし、データをクエリできない場合は null が返されるため、このときに array_merge を使用するとエラーが発生します。次の

<?php

$arr1 = array(&#39;apple&#39;, &#39;pear&#39;);
$arr2 = null;

$arr3 = array_merge($arr1, $arr2);
var_dump($arr3);
// Warning: array_merge(): Argument #2 is not an array in D:\WWW\test.php on line 6
// NULL

は警告を生成し、array_merge の戻り値は null になります。
処理方法は難しくなく、パラメータを配列に変換するだけで、関数をカプセル化して処理することができます。注意すべきはパラメータ false の扱い方です。以下のように

<?php

/**
 * 完善 array_merge
 * 将所有参数转换为数组,null、false 转换为空数组
 * @param array ...$args
 * @return array
 */
function array_merge_perfect(...$args)
{
    $fun = function ($value) {
        if ($value === false) {
            return array();
        }

        return (array)$value;
    };

    // 将所有参数都转换为 array 类型
    $arr = array_map($fun, $args);

    $newArray = array();
    foreach ($arr as $key => $value) {
        $newArray = array_merge($newArray, $value);
    }

    return $newArray;
}

$arr1 = array('test' => array('apple', 'pear'), 'test1' => array('apple', 'pear'));
$arr2 = false;
$arr3 = null;

print_r((array)$arr2);// Array ( [0] => )
echo '<br />';
print_r((array)$arr3);// Array ( )
echo '<br />';

print_r(array_merge_perfect($arr1, $arr2));// Array ( [test] => Array ( [0] => apple [1] => pear ) [test1] => Array ( [0] => apple [1] => pear ) )
echo '<br />';
print_r(array_merge_perfect($arr1, $arr3));// Array ( [test] => Array ( [0] => apple [1] => pear ) [test1] => Array ( [0] => apple [1] => pear ) )
echo '<br />';
print_r(array_merge_perfect($arr2, $arr3));// Array ( )
echo '<br />';

以上がPHP での array_merge 関数の詳細な使用法 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。