2011-02-02 6 views
0

J'ai deux tableaux bidimensionnels (en fait, il s'agit de tableaux associatifs imbriqués) avec une structure prédéfinie: $array1 et $array2. tableau première liste de tous les objets par leur numéro d'identification:Fusionner des tableaux bidimensionnels en PHP

$array1 = array(
    array(id => 1), 
    array(id => 2), 
    array(id => 3), 
    array(id => 4), 
    array(id => 5) 
); 

Le deuxième tableau énumère les relations entre les objets (par exemple, l'objet 2 est relié à des objets 3, 4 et 5):

$array2 = array(
    array(id1 => 1, id2 => 2), 
    array(id1 => 2, id2 => 3), 
    array(id1 => 2, id2 => 4), 
    array(id1 => 2, id2 => 5) 
); 

L'objectif est de remplacer les valeurs id de $array2 avec les indices correspondants de $array1. Donc, dans mon cas, le résultat devrait être:

0 1 // index of value 1 (id1) in $array1 is 0, index of 2 (id2) is 1 
1 2 
1 3 
1 4 

Ci-dessous est mon travail actuel. Tout d'abord je « convertir » $array1 à la matrice unidimensionnelle:

foreach ($array1 as $row) { 
    $array3[] = $row['id']; 
} 

Puis-je utiliser la fonction array_search et passer par $array2 et rechercher la $array3 pour une valeur donnée et renvoie la clé correspondante $array3:

foreach ($array2 as $row) { 
    $value1 = $row['id1']; 
    $key1 = array_search($value1, $array3); 
    echo $key1; 
    echo "\t"; 
    $value2 = $row['id2']; 
    $key2 = array_search($value2, $array3); 
    echo $key2; 
    echo '<br />'; 
} 

Ma question est simple: existe-t-il une façon plus élégante de le faire (sans utiliser la fonction array_search)?

Merci d'avance pour vos idées.

Best, Andrej

Répondre

1

Vous pouvez utiliser un tableau associatif qui associe la valeur à l'indice.

foreach ($array1 as $index => $row) { 
    $array3[$row['id']] = $index; 
} 

Ensuite, vous pouvez

$key1 = $array3[$value1]; 

et

$key2 = $array3[$value2]; 
+0

Merci, fonctionne comme un charme. – Andrej

1

si chaque ligne de $array1 ont un identifiant unique, vous pouvez retourner les $array3

<?php 
$array3 = array(); 
foreach ($array1 as $k => $v) { 
    $array3[$v['id']] = $k; 
} 
foreach ($array2 as $row) { 
    list($id1, $id2) = $row; 
    printf("%s\t%s<br />", $array3[$id1], $array3[$id2]); 
} 
+0

Merci; de belles solutions utilisant la fonction de liste dans la deuxième boucle. – Andrej

Questions connexes