PHP:数组问题

Ham*_*mza 1 php arrays facebook arraylist

我是一个php新手,我正在为我的flash游戏创建一个Facebook应用程序.在应用程序的主页面中,我想打印按分数排序的当前用户朋友.

我使用此API函数的第一个用户朋友使用我的应用程序:

<?php $friends = $facebook->api_client->friends_getAppUsers();?>
Run Code Online (Sandbox Code Playgroud)

$ friends是一个包含所有用户朋友ID的数组,每个ID都是一个bigint.

之后我创建另一个数组来存储在Friends ID的+分数中:

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

get_user_bestscore($朋友); 功能从我的DB获得分数.

我对数组进行排序,以显示按分数排序的朋友:

<?php sort($fscores); ?>
Run Code Online (Sandbox Code Playgroud)

最后一步显示$ fscores数组以显示来自ID的朋友姓名,而得分I使用:

<?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>';
}
?>
Run Code Online (Sandbox Code Playgroud)

$ score var显示从DB到数组正确存储的分数,但$ fid(Facebook Friend ID)显示ex:0

我使用print_r来了解我找到的$ scores数组内容:Array([0] => 5.87)

在我找到的第一个$ friends数组中: Array ( [0] => 100000625691889 )

我想得到的是: Array ( [100000625691889 ] => 5.87)

任何解决方案,请

提前致谢.

kal*_*ali 6

sort() 功能将删除您的键和自动索引.

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

注意:此函数为数组中的元素分配新键.它将删除可能已分配的任何现有密钥,而不仅仅是重新排序密钥.

您可以使用它asort()来排序数组并保留键.


cle*_*tus 5

我不是100%确定我理解你的问题.看起来你有一个如下所示的数组:

100000625691889 => 5.87
Run Code Online (Sandbox Code Playgroud)

而你正在失去关键.如果是这样,那是因为你正在使用sort(),它不保留数组索引.如果要保留数组键,请asort()改用.

注意:我不是指按键排序(除非那是你想要的).按键排序是通过ksort().让我用一些例子来澄清这一点:

$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);
Run Code Online (Sandbox Code Playgroud)

按值排序(sort()):

Array
(
    [0] => 3
    [1] => 5
    [2] => 11
)
Run Code Online (Sandbox Code Playgroud)

按值保存键(asort())排序:

Array
(
    [5678] => 3
    [1234] => 5
    [3456] => 11
)
Run Code Online (Sandbox Code Playgroud)

按键排序(ksort()):

Array
(
    [1234] => 5
    [3456] => 11
    [5678] => 3
)
Run Code Online (Sandbox Code Playgroud)