Fusion de tableaux PHP avec des clés numériques
Comment faire pour que array_merge() écrive deux clés avec des valeurs différentes mais le même index de clé de deux tableaux?
par exemple, Fusion:
   [0] => 'whatever'   
avec
  [0] => 'whatever', [1] => 'a', [2] => 'b'   
doit produire
  [0] => 'whatever', [1] => 'a', [2] => 'b'   
fondamentalement, je veux que array_merge soit bahave de la même façon qu'il se comporte si les tableaux ont des clés de chaîne...
8 réponses
 utilisez l'opérateur + .  
  comparer  array_merge  à + opérateur: 
<?php
$a1 = array(0=>"whatever",);
$a2 = array(0=>"whatever",1=>"a",2=>"b");
print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>
sortie:
Array
(
    [0] => whatever
    [1] => whatever
    [2] => a
    [3] => b
)
Array
(
    [0] => whatever
    [1] => a
    [2] => b
)
  Le  +  opérateur    encore    fonctionne si votre tableau associatif a l'aide des touches numériques out-of-order":  
<?php
$a1 = array(0=>"whatever",);
$a2 = array(1=>"a",0=>"whatever",2=>"b");
print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>
sortie:
Array
(
    [0] => whatever
    [1] => a
    [2] => whatever
    [3] => b
)
Array
(
    [0] => whatever
    [1] => a
    [2] => b
)
  Avis  array_merge  dans    ce     affaire crée une nouvelle clé.  Pas souhaitable...  
assez facile à écrire manuellement:
function array_merge_custom($first, $second) {
    $result = array();
    foreach($first as $key => $value) {
        $result[$key] = $value;
    }
    foreach($second as $key => $value) {
        $result[$key] = $value;
    }
    return $result;
}
     mise à Jour:    il se comporte différemment que l'opérateur union (  return $first + $second;  ) car dans ce cas le    deuxième    tableau de victoires lorsque les deux éléments avec la même clé.  
  cependant, si vous changez les lieux des arguments et placez le tableau que vous voulez "gagner" en cas de conflits comme le  premier   opérande, vous pouvez obtenir le même comportement. Donc la fonction ci-dessus se comporte exactement comme  return $second + $first;  .  
   array_replace  fait exactement cela. Voir:    http://php.net/manual/de/function.array-replace.php     
function array_merge_custom()
{
    $array      = array();
    $arguments  = func_num_args();
    foreach($arguments as $args)
        foreach($args as $key => $value)
            $array[$key] = $value;
    return $array;
}
  vous devez utiliser  $a2+$a1  pour obtenir le même résultat avec  array_merge($a1,$a2);   
$a1 = array(
    'k1' => 1,
    'k2' => 2,
    'k3' => 3,
);
$a2 = array(
    'k1' => 11,
    'k2' => 22,
    'k4' => 44,
);
Code:
print_r(array_merge($a1,$a2));
sortie:
Array ( 
    [k1] => 11 
    [k2] => 22 
    [k3] => 3 
    [k4] => 44 
)
Code:
print_r($a1+$a2);
sortie:
Array ( 
    [k1] => 1 
    [k2] => 2 
    [k3] => 3 
    [k4] => 44 
)
Code:
print_r($a2+$a1);
sortie:
Array ( 
    [k1] => 11 
    [k2] => 22 
    [k4] => 44 
    [k3] => 3 
) 
 vous pouvez utiliser array_merge() et ensuite utiliser array_unique() .  
the solution could be this:
function array_merge_custom($array1, $array2) {
    $mergeArray = [];
    $array1Keys = array_keys($array1);
    $array2Keys = array_keys($array2);
    $keys = array_merge($array1Keys, $array2Keys);
    foreach ($keys as $key) {
        $mergeArray[$key] = array_merge_recursive(isset($array1[$key]) ? $array1[$key] : [], isset($array2[$key]) ? $array2[$key] : []);
    }
    return $mergeArray;
}
$array1 = [
    '66_' => [
        'k1' => 1,
        'k2' => 1,
    ],
    '67_' => [
        'k1' => 1,
        'k2' => 1,
    ],
    '68_' => [
        'k1' => 1,
        'k2' => 1,
    ],
    68 => [
        'k1' => 1,
        'k2' => 1,
    ]
];
$array2 = [
    '66_' => [
        'a1' => 1,
        'a2' => 1,
    ],
    '68_' => [
        'b1' => 1,
        'b2' => 1,
    ],
    68 => [
        'b1' => 1,
        'b2' => 1,
    ]
];
echo '<pre>';
print_r(array_merge_custom($array1, $array2));
$arrA = [10, 11, 12];
$arrB = [12, 13];
$arrCommon = array_keys(array_flip($arrA) + array_flip($arrB));
print_r($arrCommon);
Array
(
    [0] => 10
    [1] => 11
    [2] => 12
    [3] => 13
)
comparer à faux utilisation de " + "
$arrCommon = $arrA + $arrB;
print_r($arrCommon);
Array
(
    [0] => 10
    [1] => 11
    [2] => 12
)