2017-06-28 5 views
-1

J'ai array qui contient un score et id qui calculé à partir d'une autre fonction Et j'ai des informations d'utilisateur qui a réessayé de DB.pousser à un tableau multidimensionnel dans php

Dans les deux ID de groupe sont les mêmes comment puis-je les pousser à un tableau?

Score Tableau

Array 
(
    [0] => Array 
     (
      [id] => 85 
      [total_cnt] => 2006 
     ) 

    [1] => Array 
     (
      [id] => 86 
      [total_cnt] => 1014 
     ) 

    [2] => Array 
     (
      [id] => 92 
      [total_cnt] => 6 
     ) 

    [3] => Array 
     (
      [id] => 93 
      [total_cnt] => 6 
     ) 
) 

informations utilisateur

Array 
(
    [0] => Array 
     (
      [id] => 52 
      [user_phone] => 00000000 
      [user_email] => [email protected] 
      [user_name] => yahoo 
      [user_picture] =>FG6K7Z3XTc.Pic.jpg 
      [user_post_hour] => 24 
      [user_is_block] => 1 
      [user_reg_date] => 2017-05-16 13:52:35 
     ) 

    [1] => Array 
     (
      [id] => 78 
      [user_phone] => 000000001 
      [user_email] => [email protected] 
      [user_name] => google 
      [user_picture] =>XqWKSDVci.Pic.jpg 
      [user_post_hour] => 24 
      [user_is_block] => 0 
      [user_reg_date] => 2017-05-16 13:52:35 

     ) 
) 

Mon sortie Desire

Array 
    (
     [0] => Array 
      (
       [id] => 86 <--Same ID in both arrays 
       [user_phone] => 00000000 
       [user_email] => [email protected] 
       [user_name] => yahoo 
       [user_picture] =>FG6K7Z3XTc.Pic.jpg 
       [user_post_hour] => 24 
       [user_is_block] => 1 
       [user_reg_date] => 2017-05-16 13:52:35 

       [total_cnt] => 1014 <-- first array field added 
      ) 

Je veux un optim Code isé et je ne vais pas utiliser la boucle pour faire ce

Merci pour votre aide

Répondre

0

Mise à jour:

Une meilleure approche semble être "array_column":

$cnts = array_column($scores, 'total_cnt', 'id'); 
foreach ($userInfo as $key => $item) { 
    $userInfo[$key]['total_cnt'] = $cnts[$item['id']]; 
} 

J'ai fait quelques tests de référence "naïfs" en utilisant microtime() et des données de test comme vos tableaux:

temps d'exécution: 10000 articles dans les deux tableaux: array_column vs 0,85S foreach 0,005 s

20000 articles dans les deux tableaux: array_column 0.011s vs 18s foreach

réponse originale:

Vous pouvez également utiliser foreach boucles comme ceci:

foreach ($userInfo as $userKey => $item) { 
    foreach ($scores as $scoreKey => $score) { 
     if ($score['id'] == $item['id']) { 
      $userInfo[$userKey]['total_cnt'] = $score['total_cnt']; 
      unset($scores[$scoreKey]); 
      break; 
     } 
    } 
} 

Le unset dans la seconde boucle " supprime "le score traité du tableau $ scores pour réduire le nombre de cycles d'itération dans le cycle suivant. S'il vous plaît noter que le tableau $ scores sera vide après, peut-être créer une copie de celui-ci et de travailler avec ça.

+0

NON, C'est un pire moyen car le temps d'exécution du code est trop élevé –

+0

malheureusement ne fonctionne pas –

+0

Pourquoi pas? Exemple de travail: https://eval.in/823485 – user1915746