2010-08-31 6 views
1

Je suis un débutant php, et je crée une application Facebook pour mon jeu flash. Dans la page principale de l'application, je veux imprimer les amis utilisateurs actuels triés par score.PHP: Problème avec Arrays

Je reçois premiers amis de l'utilisateur à l'aide de mon application avec cette fonction API:

<?php $friends = $facebook->api_client->friends_getAppUsers();?> 

$ amis est un tableau avec tous les amis ID d'utilisateur, chaque ID est un bigint.

après que je crée un autre tableau pour stocker dans Friends ID + Scores:

<?php 
foreach($friends as $friend) 
{ 
$fscores["$friend"] = get_user_bestscore($friend); 
} 
?> 

get_user_bestscore (ami $); Fonction obtenir le score de ma base de données.

je trier le tableau à afficher triées par score:

<?php sort($fscores); ?> 

Dans l'étape finale représenterez le tableau fscores $ pour afficher les noms des amis de ID, et le score que j'utilise:

<?php 
foreach($fscores as $fid => $score) 
{ 
echo '<P>'; 
echo '<fb:profile-pic uid="'.$fid.'" linked="true" /><br>'; 
echo '<b># '.$counter++.'</b>'; 
echo '<b>- <fb:name uid="'.$fid.'" useyou="false"/></b><br>'; 
echo '<b>Score : '.$score.'</b>'; 
echo '</P>'; 
} 
?> 

le $ score var affiche le score stocké de DB à tableau correctement, mais $ fid (Facebook Friend ID) affichage ex: 0

J'ai utilisé print_r pour connaître le contenu du tableau $ scores trouvé: Array ([0] => 5,87)

et dans le premier réseau d'amis $ J'ai trouvé: Array ([0] => 100000625691889)

Ce que je veux est: Array ([100000625691889 ] => 5.87)

Toute solution s'il vous plaît,

Merci d'avance.

Répondre

5

Je ne suis pas sûr à 100% que je comprends votre question. Il semble que vous ayez un tableau qui ressemble à ceci:

100000625691889 => 5.87 

et vous perdez la clé. Si c'est le cas, c'est parce que vous utilisez sort(), qui ne conserve pas les index de tableau. Si vous souhaitez conserver les clés de tableau, utilisez plutôt asort().

Note: Je ne veux pas dire tri par clé (sauf si c'est ce que vous voulez).Le tri par clé est effectué par ksort(). Permettez-moi de clarifier cela avec quelques exemples:

$arr = array(1234 => 5, 5678 => 3, 3456 => 11); 
sort($arr); 
print_r($arr); 
$arr = array(1234 => 5, 5678 => 3, 3456 => 11); 
asort($arr); 
print_r($arr); 
$arr = array(1234 => 5, 5678 => 3, 3456 => 11); 
ksort($arr); 
print_r($arr); 

Tri par valeur (sort()):

Array 
(
    [0] => 3 
    [1] => 5 
    [2] => 11 
) 

Tri par les clés de valeur conservation (asort()):

Array 
(
    [5678] => 3 
    [1234] => 5 
    [3456] => 11 
) 

Tri par clé (ksort()):

Array 
(
    [1234] => 5 
    [3456] => 11 
    [5678] => 3 
) 
+0

Trier Associatavly serait le chemin le plus simple :) +1 – RobertPitt

+0

Merci pour l'aide (y), a bien fonctionné avec asort, je dois lire de plus en plus sur les fonctions de tableau et de test. – Hamza

6

sort() La fonction supprimera vos clés et votre index automatique.

http://www.php.net/manual/en/function.sort.php

Note: Cette fonction assigne de nouvelles clés aux éléments dans le tableau. supprime toutes les clés existantes qui ont été attribuées au lieu de simplement en réorganisant les clés.

Vous pouvez utiliser asort() pour trier la matrice et conserver les clés.

+0

battu moi aussi, +1 – RobertPitt

+0

Pourquoi ne pas simplement utiliser http://www.php.net/asort sur son propre ... Je suppose que je ne vois pas le besoin de cette fonction personnalisée au moins pour ce scénario. –

+0

vrai, je suis gonno l'éditer – kali