Maison > développement back-end > tutoriel php > Utilisation détaillée de la fonction array_merge en php (avec exemples)

Utilisation détaillée de la fonction array_merge en php (avec exemples)

不言
Libérer: 2023-04-04 19:04:02
avant
8367 Les gens l'ont consulté

Cet article vous présente l'utilisation détaillée de la fonction array_merge en PHP (avec des exemples). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

array_merge Cette fonction est très pratique et couramment utilisée, mais elle possède certaines fonctionnalités qui peuvent causer des problèmes si vous n'y faites pas attention. Ce problème s'est produit lorsque je modifiais le code de mon collègue il y a quelques jours, j'ai donc recherché quelques informations et les ai notées.

Définition et syntaxe

array array_merge ( array $array1 [, array $... ] )
Fusionner un ou plusieurs tableaux.
S'il y a le même nom de clé de chaîne dans le tableau d'entrée, la valeur après le nom de clé écrasera la valeur précédente. Cependant, si le tableau contient des clés numériques, les valeurs suivantes n'écraseront pas les valeurs d'origine, mais leur seront ajoutées.

La syntaxe est simple et la valeur de retour est le tableau fusionné (pas toujours la valeur de retour attendue).

Instance

<?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] => 橙子 )
Copier après la connexion

Remplir les fosses

Alors, quels sont les soi-disant pièges de array_merge ?
En utilisation réelle, le framework est utilisé pour interroger les données de la base de données, et ce qui est renvoyé est un tableau à deux dimensions ou un tableau à une dimension. Mais si les données ne peuvent pas être interrogées, null sera renvoyé si array_merge est utilisé à ce moment, une erreur se produira. Le

<?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
Copier après la connexion

suivant générera un avertissement et la valeur de retour de array_merge sera nulle.
La méthode de traitement n'est pas difficile, il suffit de convertir les paramètres dans un tableau et vous pouvez encapsuler la fonction pour le traitement. Ce qu'il convient de noter, c'est comment gérer le paramètre false. Comme suit

<?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 />';
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal