PHP에서 array_merge 함수의 자세한 사용법(예제 포함)

不言
풀어 주다: 2023-04-04 19:04:02
앞으로
8320명이 탐색했습니다.

이 기사는 PHP의 array_merge 함수에 대한 자세한 사용법을 제공합니다(예제 포함). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

array_merge 이 기능은 매우 실용적이고 흔히 사용되는 기능이지만, 주의하지 않으면 문제를 일으킬 수 있는 기능이 있습니다. 며칠 전 동료의 코드를 수정하다가 이런 문제가 발생해서 몇 가지 정보를 찾아 적어봤습니다.

정의 및 구문

array array_merge ( array $array1 [, array $... ] )
하나 이상의 배열을 병합합니다.
입력 배열의 문자열 키 이름이 동일한 경우 키 이름 뒤의 값이 이전 값을 덮어씁니다. 그러나 배열에 숫자 키가 포함되어 있으면 후속 값이 원래 값을 덮어쓰지 않고 추가됩니다.

구문은 간단하며 반환 값은 병합된 배열입니다(항상 예상한 반환 값은 아님).

Example

<?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] => 橙子 )
로그인 후 복사

Filling Pits

그렇다면 소위 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿