2010-12-31 2 views
0

je les tableaux suivants:Comment fusionner les tableaux dans un format particulier?

1) pour un total placé

Array 
(
[0] => Array 
    (
     [centers] => Array 
      (
       [name] => delhi 
       [id] => 1 
      ) 

     [0] => Array 
      (
       [totalplaced] => 8 
      ) 

    ) 

[1] => Array 
    (
     [centers] => Array 
      (
       [name] => mumbai 
       [id] => 2 
      ) 

     [0] => Array 
      (
       [totalplaced] => 1 
      ) 

    ) 

) 

2) pour un total de travail

Array 
(
[0] => Array 
    (
     [centers] => Array 
      (
       [name] => delhi 
       [id] => 1 
      ) 

     [0] => Array 
      (
       [totalworking] => 4 
      ) 

    ) 

[1] => Array 
    (
     [centers] => Array 
      (
       [name] => mumbai 
       [id] => 2 
      ) 

     [0] => Array 
      (
       [totalworking] => 1 
      ) 

    ) 

) 

3) pour Total Formés

Array 
(
[0] => Array 
    (
     [centers] => Array 
      (
       [name] => delhi 
       [id] => 1 
      ) 

     [0] => Array 
      (
       [totaltrained] => 8 
      ) 

    ) 

[1] => Array 
    (
     [centers] => Array 
      (
       [name] => mumbai 
       [id] => 2 
      ) 

     [0] => Array 
      (
       [totaltrained] => 1 
      ) 

    ) 

) 

Je voulais fusionner ces tableaux afin que le réseau résultant devrait ressembler à ceci

[newarray] => Array(
[0] => Array (
    [centers] => Array 
      (
       [name] => delhi 
       [id] => 1 
       [totalplaced] => 8 
       [totalworking] => 4 
       [totaltrained] => 8 
      ) 
) 
[1]=> Array(
    [centers] => Array 
      (
       [name] => mumbai 
       [id] => 2 
       [totalplaced] => 1 
       [totalworking] => 1 
       [totaltrained] => 1 
      ) 
    ) 
) 

Ce tableau est la représentation des données ci-dessus que je veux afficher

centername  totalplaced totalworking totaltrained 
    delhi    8    4    8 
    mumbai   1    1    1 

S'il vous plaît aidez-moi à ce sujet.

Merci

Pankaj Khurana

Répondre

1

La difficulté est que les fonctions PHP tels que array_merge() et array_merge_recursive() ne seront pas fusionner les données en touches numériques, mais plutôt se retaper une touche numérique double. Ainsi, par exemple donné deux tableaux:

array(
    'test' => 'abc', 
    0 => 'xyz' 
); 

array(
    'test' => 'def', 
    0 => 'uvw' 
); 

les fusionner avec array_merge() produira un tableau comme:

array(
    'test' => 'def', 
    0 => 'xyz', 
    1 => 'uvw' 
); 

Donc, vous avez besoin d'une fonction personnalisée pour être « additif » sur une touche, que ce soit une chaîne ou une clé numérique. Essayez ceci:

function mixed_key_array_merge() { 

    $args = func_get_args(); 

    $result = array(); 

    foreach ($args as $arg) { 

    // discard non-array arguments; maybe this could be better handled 
    if (!is_array($arg)) { 
     continue; 
    } 

    foreach ($arg as $key => $value) { 

     if (!isset($result[$key])) { 
     $result[$key] = $value; 
     } else if (is_array($result[$key])) { 
     $result[$key] = call_user_func_array('mixed_key_array_merge',array($result[$key],$value)); 
     } 

    } 

    } 

    return $result; 

} 
Questions connexes