2015-04-23 2 views
0

Je suis en train de fusionner deux tableaux contenant un tableau multidimensionnel et créer un troisième tableau dans le format ci-dessous »PHP Combiner tableau Multidimensional

Voici le premier tableau multidimensionnel:

Array 
(
    [USA1] => Array 
    (
     [0] => NewYork 
     [1] => MASS 
    ) 

[USA2] => Array 
    (
     [0] => NewYork 
    ) 

[USA3] => Array 
    (
     [0] => NewYork 
    ) 

) 

Ceci est mon deuxième tableau multidimensionnel:

Array 
(
    [USA1] => Array 
     (
      [NewYork] => Array 
       (
       [0] => Array 
        (
         [0] => Town1 
         [1] => Town2 
        ) 
      ) 

     [MASS] => Array 
      (
       [0] => Array 
        (
         [0] => Town3 
         [1] => Town4 
        ) 
      ) 
    ) 

[USA2] => Array 
    (
     [NewYork] => Array 
      (
       [0] => Array 
        (
         [0] => Town1 
         [1] => Town2 
        ) 
      ) 
    ) 

maintenant, je veux faire 3 choix qui sera basé sur la fusion il y a clé commune Si les clés répondent alors je dois céder sur. e des valeurs de ce tableau en mode round-robin:

Par exemple. Si la valeur est "NewYork" sous la touche USA1, alors je dois assigner la valeur "Town1" d'un autre tableau. Comme cette clé est également présente sous USA2, je dois assigner "Town2" (mode round robin). S'il y a plus de valeurs "NewYork" sont présentes et si vous avez plus de valeurs comme "Town9" alors nous devons assigner cette valeur, si elle n'est pas présente alors je dois assigner la valeur "Town1". Si la clé est présente une seule fois comme "MASS", nous devons supprimer la deuxième valeur qui est "Town4" dans ce cas.

Array 
    (
     [USA1] => Array 
      (
       [0] => NewYork => Town1 
       [1] => Mass => Town3 
      ) 

    [USA2] => Array 
     (
      [0] => NewYork => Town2 
     ) 

    [USA3] => Array 
     (
      [0] => NewYork =>Town1 
     ) 

) 

Note: Toutes les sorties Array sauf 3ème est de commande print_r

apprécient l'aide Grandement. Je vous remercie.

+0

Utiliser des boucles et des affectations pour initialiser le tableau vide. – Justinas

Répondre

1

Je ne comprends pas exactement ce que vous demandez. Ce n'est pas vraiment une fusion car dans votre tableau final [USA3] devrait être vide car il n'y a pas de clé correspondante dans array2. Et vous demandez que les valeurs soient assignées round-robin, ce qui n'est pas la manière dont je m'attends à ce que la fusion d'un tableau se comporte. Je suppose que vous essayez de répartir équitablement les villes entre les villes. Sur la base de cette hypothèse, j'ai seulement utilisé les valeurs de USA1 dans le tableau deux, mais cela produira le troisième tableau que vous avez fourni. J'ai mis à jour l'exemple de code pour fusionner le second tableau.

$map = array(); 
foreach ($array2 as $usa => $cities) 
{ 
    $map = $cities + $map; 
} 

$towns = array(); 

foreach($array1 as $usa => $cityArray) 
{ 
    while(!empty($cityArray)) 
    { 
     $city = array_shift($cityArray); 
     if(empty($towns[$city])) 
      $towns[$city] = $map[$city][0]; 

     $array3[ $usa ][] = array($city => array_shift($towns[$city])); 
    } 
} 

Cela fonctionne, mais si vous avez des valeurs différentes dans array2 $ [ « US1 »] et $ array2 [ « US2 »] alors vous devez fusionner ces deux tableaux avant de l'envoyer au code ci-dessus. Le code mis à jour fusionne correctement le second tableau.

+0

Merci "jfadich" pour votre réponse !! Désolé j'avais le type où je n'ai pas copier coller l'USA3 dans Array2 mentionné ci-dessus. J'ai fatigué en utilisant votre code et il jette une erreur sur la ligne 2 "$ cities = [];" ainsi que dans la boucle if. Donc, je ne peux pas exécuter votre code. Il ne me pointe pas le message d'erreur exact. – newbie83

+0

Vous devez exécuter une ancienne version de php. J'ai mis à jour le code pour travailler dans les versions antérieures à 5.4. Faites-moi savoir si cela fonctionne. – jfadich

+0

Merci encore "jfadich" !! On dirait que maintenant l'erreur est partie et que vous pouvez exécuter votre code mais une fois que j'imprime print_r ($ array3) en dehors de la boucle foreach je vois tout le tableau similaire à array2 mentionné ci-dessus. Mais si vous m'aidez à donner des résultats comme Array 3 mentionné ci-dessus, ce sera une grande aide !! – newbie83