【问题标题】:PHP : Problem with ArraysPHP:数组问题
【发布时间】:2010-08-31 01:15:00
【问题描述】:

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

我通过这个 API 函数使用我的应用程序获得了第一批用户朋友:

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

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

之后,我创建另一个数组来存储好友 ID 的 + 分数:

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

get_user_bestscore($friend);函数从我的数据库中获取分数。

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

<?php sort($fscores); ?>

在最后一步显示 $fscores 数组以显示来自 ID 的朋友姓名和我使用的分数:

<?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>';
}
?>

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

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

在我发现的第一个 $friends 数组中: Array ( [0] =&gt; 100000625691889 )

我想要得到的是: Array ( [100000625691889 ] =&gt; 5.87)

请提供任何解决方案,

提前致谢。

【问题讨论】:

    标签: php arrays arraylist facebook


    【解决方案1】:

    sort() 函数将删除您的密钥并自动索引。

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

    注意:此函数分配新键 到数组中的元素。它会 删除任何可能具有的现有密钥 被分配,而不仅仅是 重新排序键。

    您可以使用asort() 对数组进行排序并保留键。

    【讨论】:

    • 为什么不单独使用php.net/asort...我想我认为至少在这种情况下不需要这个自定义函数。
    【解决方案2】:

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

    100000625691889 => 5.87
    

    而你丢失了钥匙。如果是这样,那是因为您使用的是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);
    

    按值排序 (sort()):

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

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

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

    按键排序(ksort()):

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

    【讨论】:

    • Sorting Associatavly 将是最简单的路线 :) +1
    • 感谢您的帮助 (y),在 asort 上工作得很好,我必须阅读更多关于数组函数和测试的内容。
    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 2010-10-04
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多