2017-05-23 2 views
1

J'écris du code en PHP pour collecter tous les hashtags que j'ai utilisés dans tous mes articles de presse et voir dans combien de messages j'ai utilisé le hashtag et combien aime le post avec ce hashtag reçu au total.PHP combine plusieurs tableaux en un tableau multidimensionnel

J'ai rassemblé tous les articles de presse dans ma base de données et je peux maintenant exporter cette information. Voici un exemple de tableau multidimensionnel qui est sortie:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [caption] => #londra #london #london_only #toplondonphoto #visitlondon #timeoutlondon #londres #london4all #thisislondon #mysecretlondon #awesomepix #passionpassport #shootermag #discoverearth #moodygrams #agameoftones #neverstopexploring #beautifuldestinations #artofvisuals #roamtheplanet #jaw_dropping_shots #fantastic_earth #visualsoflife #bdteam #nakedplanet #ourplanetdaily #earthfocus #awesome_earthpix #exploretocreate #londoneye 
      [likesCount] => 522 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [caption] => #londra #london #london_only #toplondonphoto #visitlondon #timeoutlondon #londres #london4all #thisislondon #mysecretlondon #awesomepix #passionpassport #shootermag #discoverearth #moodygrams #agameoftones #neverstopexploring #beautifuldestinations #artofvisuals #roamtheplanet #jaw_dropping_shots #fantastic_earth #visualsoflife #bdteam #nakedplanet #ourplanetdaily #earthfocus #awesome_earthpix #harrods #LDN4ALL_One4All 
      [likesCount] => 1412 
     ) 
) 

Je suis en mesure de séparer ces hashtags en utilisant la fonction suivante:

function getHashtags($string) { 
    $hashtags= FALSE; 
    preg_match_all("/(#\w+)/u", $string, $matches); 
    if ($matches) { 
     $hashtagsArray = array_count_values($matches[0]); 
     $hashtags = array_keys($hashtagsArray); 
    } 
    return $hashtags; 
} 

Maintenant, je veux créer un tableau multidimensionnel pour chaque hashtag qui devrait ressembler à ceci:

Array 
(
    [0] => Array 
    (
     [hash] => #londra 
     [times_used] => 2 
     [total_likes] => 153 
    ) 
    [1] => Array 
    (
     [hash] => #london 
     [times_used] => 12 
     [total_likes] => 195 
    ) 
) 

Je suis tout à fait nouveau à cela et ne savez pas comment y parvenir. Aide et suggestions sont appréciées!

+3

Comment calculez-vous les gens comptent pour chaque hashtag? – sidyll

+0

Il est difficile de le calculer, mais je résumerais le total des likes dans les messages auxquels le tag has a été utilisé, puis le diviserais par le nombre de messages dans lesquels il a été utilisé. –

Répondre

0

Il serait plus facile d'utiliser les hashtags comme clés dans votre tableau. Vous pouvez le transformer ultérieurement en votre format final si vous le souhaitez. L'idée est de de traverser votre tableau d'entrée et dans chaque élément itérer sur la chaîne de hashtags donnée, en augmentant les compteurs.

Et si vos hashtags sont toujours dans une chaîne comme ça, séparés par des espaces , vous pouvez également obtenir un tableau de puis avec explode() ou preg_split() pour un contrôle plus précis.

$posts = # your input array 
$tags = []; 

foreach ($posts as $post) { 
    $hashtags = explode(' ', $post['caption']); 
    foreach ($hashtags as $tag) { 
     if (!key_exists($tag, $tags)) { 
      # first time seeing this one, initialize an entry 
      $tags[$tag]['counter'] = 0; 
      $tags[$tag]['likes'] = 0; 
     } 
     $tags[$tag]['counter']++; 
     $tags[$tag]['likes'] += $post['likesCount']; 
    } 
} 

Transformer quelque chose plus proche de votre demande initiale:

$result = array_map(function($hashtag, $data) { 
    return [ 
     'hash' => $hashtag, 
     'times_used' => $data['counter'], 
     'total_likes' => $data['likes'], 
     'average_likes' => $data['likes']/$data['counter'], 
    ]; 
}, array_keys($tags), $tags); 
+0

Amazing @sidyll! Cela fonctionne très bien! –