8
votes

PHP Fusionner des tableaux par valeur

Je sais que cela est facilement accompli avec un foreach , puis un pendant -> liste, etc. procédure, (je l'ai déjà accompli), mais je sens que je sens que Mon code est un peu sale et il ne ressemble pas à la meilleure solution ... Je cherche à utiliser des fonctions de réseau PHP natif pour effectuer ce qui suit:

J'ai deux tableaux qui ressemblent à ceci: xxx

et j'ai besoin de quelque chose comme ce qui suit: xxx

est un moyen de pouvoir fusionner deux tableaux avec le ID Valeur (ou AY Autre) sans entrer dans un ensemble sans fin de foreach S?


1 commentaires

Les éléments sont-ils avec le même identifiant sur le même index dans les deux tableaux? En d'autres termes, si l'élément avec ID 5 est à l'index 3 dans la première matrice, il sera également à l'index 3 dans la deuxième matrice?


5 Réponses :


15
votes

Utilisez array_merge_recursive () xxx

ou faire votre propre fonction (il peut être plus rapide) xxx


2 commentaires

Génial !, Merci pour cela, FYI: L'approche de la fonction fonctionne excellente tant que vous devez supprimer ces enregistrements qui ne se répètent pas sur les deux tableaux.


Cela ne répond pas techniquement à la question. @Osvaldom. Veut rejoindre en fonction de la valeur de l'ID, pas par les clés.



0
votes

OK, supposons que vos tableaux sont appelés $ Arr1 et $R2, vous pouvez le faire:

<?php
$newarray = Array();
foreach ($arr1 as $element=>$value){
    $newarray = array_merge($arr1[$element],$arr2[$element])
}
?>


0 commentaires

4
votes

Comme rayon remarqué dans un commentaire, la réponse acceptée ne répond pas réellement à la question. J'étais incapable de trouver une réponse, j'ai donc créé la petite fonction utilitaire suivante: xxx

l'utiliser comme suit: xxx


1 commentaires

Plus utile .. génial :)



2
votes

Ayez une belle à la fusion de tableaux comme une autre langue. C'est parce que PHP dispose d'éléments de tableau de numérotation automatique et de fusionnera ou remplacera différents éléments par des touches.

Maintenant, il est changé. P>

// array_fork
  public static function array_fork() {
    $args = func_get_args();
    $result = array();
    foreach ($args as $arr) {
      is_array($arr) || exit('[' . __METHOD__ . '] Each item must be an array.');
      foreach ($arr as $key => $val) {
        if (is_array($val)) {
          // recursion
          !isset($result[$key]) && $result[$key] = array();
          $result[$key] = self::array_fork($result[$key], $arr[$key]);
          continue;
        }
        if (is_numeric($key)) {
          if (!in_array($arr[$key], $result))
            $result[] = $arr[$key];
        } else
          $result[$key] = $arr[$key];
      }
    }
    return $result;
  }


0 commentaires

2
votes
function custom_array_merge(&$array1, &$array2) {
    $result = Array();
    foreach ($array1 as $key_1 => &$value_1) {
        // if($value['name'])
        foreach ($array2 as $key_1 => $value_2) {
            if($value_1['name'] ==  $value_2['name']) {
                $result[] = array_merge($value_1,$value_2);
            }
        }

    }
    return $result;
}
// Pass $array1, &$array2 and change the $value_2['name']  // name based on which u want to merge.

0 commentaires