2017-02-24 3 views
0

J'ai deux tableaux comme ci-dessous:Comment fusionner un tableau d'objets avec un tableau normal en php?

tableau 1:

array([0]=> 11, [1] => 2.5) 

tableau 2:

Array ( 
    [0] => stdClass Object ( 
     [type] => 1 
     [creator_id] => 3 
     [creator_name] => E1 
     [per_tar] => 300 
     [pro_tar] => 200 
     [ac] => 300 
     [PA] => 17 
     [Q1] => 800 
    ) 
    [1] => stdClass Object ( 
     [type] => 1 
     [creator_id] => 4 
     [creator_name] => E2 
     [per_tar] => 100 
     [pro_tar] => 170 
     [ac] => 0 
     [PA] => 7 
     [Q1] => 270 
    ) 
) 

Ce que je veux est que je veux fusionner le tableau 1 avec tableau 2 par ce qui suit

La touche de tableau 1 [0] est fusionnée de manière à ce que la clé du tableau 2 [0] soit identique pour toutes les clés.

Ma sortie est attendue:

Array ( 
    [0] => stdClass Object ( 
     [type] => 1 
     [creator_id] => 3 
     [creator_name] => E1 
     [per_tar] => 300 
     [pro_tar] => 200 
     [ac] => 300 
     [PA] => 17 
     [Q1] => 800 
     [new] => 11 
    ) 
    [1] => stdClass Object ( 
     [type] => 1 
     [creator_id] => 4 
     [creator_name] => E2 
     [per_tar] => 100 
     [pro_tar] => 170 
     [ac] => 0 
     [PA] => 7 
     [Q1] => 270 
     [new] => 2.5 
    ) 
) 

Je cherche la fonction array_merge() mais sa fusion la fois tableau seulement. Aidez-moi s'il vous plaît

+2

double possible de [php tableau de fusion avec la même index] (http://stackoverflow.com/questions/26426025/array-merge-php-with-same-index) –

+0

Je reçois cette array_merge d'erreur (): Argument # 1 n'est pas un tableau – Nisanth

+0

pouvez-vous afficher un exemple – Nisanth

Répondre

2
$res = []; 
foreach($array1 as $key => $val){ 
    // before merging convert object to array 
    $arr = is_object($array2[$key]) ? (array)$array2[$key] : $array2[$key]; 
    $res[$key] = array_merge($array1[$key], $arr); 
} 

print_r($res); 
0

Le meilleur pari serait de convertir l'objet stdClass en un tableau puis simplement utiliser array_merge.

convertir l'objet stdClass à un tableau comme ceci:

$array = json_decode(json_encode($object), true); 
0

D'abord, vous pouvez convertir chaque objet stdClass dans le tableau de type tableau:

array_walk_recursive($array1, function ($v) { return (is_object($v)) ? (array)$v : $v; }); 
array_walk_recursive($array2, function ($v) { return (is_object($v)) ? (array)$v : $v; }); 

Ensuite, utilisez array_merge:

$arrayMerge = array_merge($array1, $array2); 

Je ne peux pas le tester maintenant, dites-moi si cela fonctionne.

1

Vous devez itérer $array1 articles et insérer la valeur de chaque élément dans l'indice pertinent $array2.

foreach ($array1 as $key=>$value){ 
    $array2[$key]->new = $value; 
} 

voir le résultat dans demo

Aussi, si vous voulez rester array2, copier la valeur de celui-ci dans nouvelle variable comme $newArray.

$newArray = $array2; 
foreach ($array1 as $key=>$value){ 
    $newArray[$key]->new = $value; 
} 
+0

j'ai un doute. Si mon tableau 2 a 1 moyen clé que je reçois Création d'un objet par défaut à partir d'une erreur de valeur vide Comment résoudre ce problème – Nisanth

+0

@Nisanth Vous devriez vérifier si l'index cible existe dans '$ array2', puis définir une nouvelle propriété. Voir https://3v4l.org/GPRPV – Mohammad