2013-05-15 2 views
0

J'ai 2 tableaux. Est-il possible de créer un tableau de sortie et d'ajouter des clés/valeurs du premier au second? Mes tableaux ressemble:Array rechercher et combiner en PHP

La première:

Array 
    (
     [0] => Array 
      (
       [id] => 11 
       [expire] => undefined 
      ) 

     [1] => Array 
      (
       [id] => 12 
       [expire] => undefined 
      ) 

     [2] => Array 
      (
       [id] => 6 
       [expire] => 8 
      ) 

     [3] => Array 
      (
       [id] => 10 
       [expire] => 4 
      ) 
    ) 

La seconde:

Array 
    (
     [0] => Array 
      (
       [id] => 6 
       [realname] => to_es.gif 
       [extension] => gif 
       [filesize] => 57885 
      ) 

     [1] => Array 
      (
       [id] => 10 
       [realname] => to_joomla_2_customer_view.gif 
       [extension] => gif 
       [filesize] => 77182 
      ) 

     [2] => Array 
      (
       [id] => 11 
       [realname] => to_nl.gif 
       [extension] => gif 
       [filesize] => 10990 
      ) 

     [3] => Array 
      (
       [id] => 12 
       [realname] => to_PL_1.gif 
       [extension] => gif 
       [filesize] => 52826 
      ) 

    ) 

Comment je reçois le tableau de sortie:

Array 
     (
      [0] => Array 
       (
        [id] => 6 
        [realname] => to_es.gif 
        [extension] => gif 
        [filesize] => 57885 
        [expire] => 8 
       ) 

      [1] => Array 
       (
        [id] => 10 
        [realname] => to_joomla_2_customer_view.gif 
        [extension] => gif 
        [filesize] => 77182 
        [expire] => 4 
       ) 

      [2] => Array 
       (
        [id] => 11 
        [realname] => to_nl.gif 
        [extension] => gif 
        [filesize] => 10990 
        [expire] => undefined 
       ) 

      [3] => Array 
       (
        [id] => 12 
        [realname] => to_PL_1.gif 
        [extension] => gif 
        [filesize] => 52826 
        [expire] => undefined 
       ) 

     ) 
+2

Rien de mal avec 'foreach' ici; avez-vous essayé quelque chose? – Passerby

+0

L'ordre de vos éléments de tableau joue-t-il un rôle? Dans le premier tableau le tableau avec l'index [0] a un id de 11. Dans le deuxième tableau le premier tableau a et id de 6. Alors, comment voulez-vous qu'il soit fusionné? Voulez-vous juste le fusionner par des index de tableau ou par id? – thpl

+0

Bonjour, oui devrait être fusionné par id. Pas d'index. – user889349

Répondre

1

Essayez ceci:

function my_array_merge($first,$second) { 
    $new = array(); 
    foreach ($first as $f_item) { 
     foreach ($second as $i => $s_item) { 
      if ($f_item['id']===$s_item['id']) { 
       $new[] = $f_item + $s_item; 
       unset($second[$i]); 
       break; 
      } 
     } 
    } 
    usort($new, function($a,$b) { 
     return $a['id'] - $b['id']; 
    }); 
    return $new; 
} 

Exemple sur Ideone: http://ideone.com/TQIIkH

+0

Merci! Ça marche... – user889349

1

Je supposant que votre premier tableau en tant que $array1 et en second lieu comme $array2 vous pouvez boucler dans le premier tableau, puis en boucle seco nd conmparing id et une fois trouvé mélanger les deux ensemble dans une nouvelle

$new_array = array(); 
for($i=0; $i<count($array1); $i++) 
{ 
    foreach($array2 as $key => $data) 
    { 
     if($data['id'] == $array1[$i]['id']) 
     { 
      $new_array[] = array('id' => $array1[$i]['id'], 'realname' => $data['realname'], 'extension' => $data['extension'], 'filesize' => $data['filesize'], 'expire' => $array1[$i]['expire']); 
     } 
    } 
} 

var_dump($new_array); 

cette volonté sortie

array(4) { 
[0]=> 
array(5) { 
    ["id"]=> 
    string(2) "11" 
    ["realname"]=> 
    string(9) "to_nl.gif" 
    ["extension"]=> 
    string(3) "gif" 
    ["filesize"]=> 
    string(5) "10990" 
    ["expire"]=> 
    string(9) "undefined" 
} 
    [1]=> 
    array(5) { 
    ["id"]=> 
    string(2) "12" 
    ["realname"]=> 
    string(11) "to_PL_1.gif" 
    ["extension"]=> 
    string(3) "gif" 
    ["filesize"]=> 
    string(5) "52826" 
    ["expire"]=> 
    string(9) "undefined" 
    } 
    // and so on 

live working code

+0

Merci! Cela semble bon. – user889349

+0

@ user889349 vous accueillir – Fabio