PHP: проблема с массивами - PullRequest
       6

PHP: проблема с массивами

1 голос
/ 31 августа 2010

Я новичок в php, и я создаю приложение Facebook для моей флеш игры. На главной странице приложения я хочу напечатать друзей текущего пользователя, отсортированных по счету.

Я получил первых друзей пользователя, использующих мое приложение с этой функцией API:

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

$ friends - это массив всех идентификаторов друзей пользователя, каждый идентификатор - bigint.

после этого я создаю другой массив для хранения в Friends ID's + Scores:

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

get_user_bestscore ($ друга); Функция получить оценку из моей базы данных.

Я сортирую массив для отображения друзей, отсортированных по счету:

<?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 отображает счет, сохраненный из БД в массиве, но $ fid (идентификатор друга в Facebook) отображает пример: 0

Я использовал print_r, чтобы узнать содержимое массива $ scores, которое нашел: Массив ([0] => 5,87)

и в первом массиве $ friends я нашел: Array ( [0] => 100000625691889 )

Что я хочу получить: Array ( [100000625691889 ] => 5.87)

Любое решение, пожалуйста,

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 31 августа 2010

sort() функция удалит ваши ключи и автоиндекс.

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

Примечание: эта функция назначает новые клавиши к элементам в массиве. Будет удалите все существующие ключи, которые могут иметь был назначен, а не просто переупорядочение ключей.

вы можете использовать asort() для сортировки массива и сохранения ключей.

5 голосов
/ 31 августа 2010

Я не уверен на 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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...