2017-09-07 1 views
0

spécifique que j'ai 2 tableaux en langage PHP:php fusion 2 tableaux basés sur la même clé

Array 
(
    [0] => Array 
     (
      [amount] => 21600.00 
      [rows] => 2 
      [student_id] => 1 
     ) 

) 

et

Array 
(
    [0] => Array 
     (
      [amount] => 541990.00 
      [rows] => 512 
      [student_id] => 1 
     ) 

    [1] => Array 
     (
      [amount] => 347480.00 
      [rows] => 281 
      [student_id] => 2 
     ) 

    [2] => Array 
     (
      [amount] => 507400.00 
      [rows] => 214 
      [student_id] => 3 
     ) 
) 

Je veux fusionner les deux tableaux en fonction de la même valeur student_id, donc je attendre le résultat sera comme ceci:

Array 
(
    [0] => Array 
     (
      [amount] => 563590.00 
      [rows] => 514 
      [student_id] => 1 
     ) 

    [1] => Array 
     (
      [amount] => 347480.00 
      [rows] => 281 
      [student_id] => 2 
     ) 

    [2] => Array 
     (
      [amount] => 507400.00 
      [rows] => 214 
      [student_id] => 3 
     ) 
) 

J'ai essayé array_merge et array_merge_recursive mais ils ne me donne pas t il attend le résultat, merci!

+0

Je voudrais juste utiliser une boucle foreach() – rtfm

+0

Pourquoi avez-vous ce tableau 2 avec la même structure de similarité? le sélectionnez-vous à partir de deux tables différentes? Je pense que vous devriez le faire au niveau de la base de données. –

+0

Oui, je sais mais je ne peux pas le faire par requête. Donc je devrais le faire via PHP. Btw j'ai eu la réponse maintenant de Rahul –

Répondre

1

est ici simple code pour résoudre votre problème,

count($arr) > count($arr0) ? ($greater = $arr AND $smaller = $arr0) : ($smaller = $arr AND $greater = $arr0); 
foreach ($greater as $key => &$value) { 
    foreach ($smaller as $key1 => &$value1) { 
     if($value['student_id'] == $value1['student_id']){ 
      $value['amount'] +=$value1['amount']; 
      $value['rows'] +=$value1['rows']; 
     } 
    } 
} 

Vérifiez la sortie here

+0

woahhh génial, c'est gentil et j'ai eu le résultat attendu, merci beaucoup !! –

0

Le commentaire sur la combinaison des requêtes est probablement la meilleure approche.

SELECT student_id, sum(amount) as amount, sum(rows) as rows 
from students 
group by student_id; 

Toutefois, si vous ne pouvez pas le faire via une requête, PHP ne pas ajouter nativement les valeurs de tableau ensemble (il n'a pas de sens)

Voici ce que vous devez faire

function arrayMergeMatch(&$a, &$b) 
{ 
    foreach ($a as $key => $value) { 
     if (array_key_exists($key, $b)) { 
      // there's a matching index in both a & b 
      $a[$key] = [ 
       $a[$key]['amount'] += $b[$key]['amount'], 
       $a[$key]['rows'] += $b[$key]['rows'], 
       $a[$key]['student_id'], 
      ]; 
     } 
    } 
} 

$firstArray = $secondArray = []; 

$firstArray[0] = [ 
    'amount' => 21600.00, 
    'rows' => 2, 
    'student_id' => 1 
]; 


$secondArray[0] = [ 
    'amount' => 541990.00, 
    'rows' => 512, 
    'student_id' => 1, 
]; 

$secondArray[1] = [ 
    'amount' => 347480.00, 
    'rows' => 281, 
    'student_id' => 2, 
]; 

$secondArray[2] = [ 
    'amount' => 507400.00, 
    'rows' => 214, 
    'student_id' => 3, 
]; 

$firstArrayLength = count($x); 
$secondArrayLength = count($y); 

$combinedArray = null; 

if ($firstArrayLength > $secondArrayLength) { 
    // loop through x checking to see if there's a matching y 
    arrayMergeMatch($firstArray, $secondArray); 
    $combinedArray = $firstArray; 
} 
else { 
    // y is longer than or equal to x, so loop through y, looking for matching 
    // index in x 
    arrayMergeMatch($secondArray, $firstArray); 
    $combinedArray = $secondArray; 
} 

print_r($combinedArray);