0

コードに問題がありますが、問題が見つかりません。コードを使用すると、次のエラーが発生します。

警告:array_multisort()[function.array-multisort]:1506行目の/home/sagesca1/public_html/hiscores/functions.wsで配列サイズに一貫性がありません

これが私のコードです:

function findFriends($table){
    include "mysql.ws";
    $user = $_SESSION['username'];
    $xptype = findType($table)."xp";
    $query = mysql_query("SELECT u.* FROM friends uf inner join users u on uf.friend = u.username WHERE uf.user = '$user'") or die(mysql_error());
    $myFriends = array();
    $xpOrder = array();
    WHILE($row = mysql_fetch_array($query)){
        $count = count($row);
        $friends = $row['username'];
        $rank = findRank($friends, "$table");
        $sql = mysql_query("SELECT * FROM skills WHERE playerName LIKE '$friends' ORDER BY '$xptype' DESC") or die(mysql_error());
        while($skillsRow = mysql_fetch_array($sql)){
            for ($i = 1; $i <= $count; $i++){
                $myFriends[$friends] = array(
                    'xp' => $skillsRow[$xptype],
                    'lvl' => getLevelForXP($skillsRow[$xptype]),
                    'rank' => $rank,
                );
            $xpOrder[] = $skillsRow[$xptype];
            }
            array_multisort($xpOrder, SORT_NUMERIC, SORT_DESC, $myFriends);
            unset($xpOrder);
            foreach ($myFriends as $friend => $data){
                if(dots($data['xp']) !=0){
                echo '
                <a name="'.$data['rank'].'"></a>
                <a href="compare.ws?user1='.$friend.'" target="_self" class="row ">
                <span class="columnRank">
                <span>'.$data['rank'].'</span>
                </span>
                <span class="columnName">
                <span>'.BBCode($friend).'</span>
                </span>
                <span class="columnLevel">
                <span>'.$data['lvl'].'</span>
                </span>
                <span class="columnXp">
                <span>'.dots($data['xp']).'</span>
                </span>
                </a>'; 

                }
            }
        }
    }

}

誰かがこの問題を解決するのを手伝ってくれませんか?私のコードに関して他の方法が必要な場合は、喜んでこの質問に追加します。

4

2 に答える 2

0

私が言えることは、$xpOrder配列は$count要素の長さになりますが、要素を何度も上書きするだけなので$myFriends、最初のループを通過した後は1つの要素になります。for$friends

于 2012-08-20T21:19:53.923 に答える
0

マルチソートする配列の要素数が同じ場合にのみ、array_multisort を使用できます。エラーに基づいて、このエラーの原因となる要素の数が異なる$xpOrderと仮定することは有効です。$myFriends

2 つの配列のいずれかprint_rを実行して、不一致が発生する場所を特定できるかどうかを確認してください。

このコードが機能するかどうかを確認します。

    function findFriends($table){
        include "mysql.ws";
        $user = $_SESSION['username'];
        $xptype = findType($table)."xp";
        $query = mysql_query("SELECT u.* FROM friends uf inner join users u on uf.friend = u.username WHERE uf.user = '$user'") or die(mysql_error());
        $myFriends = array();
        $xpOrder = array();
        WHILE($row = mysql_fetch_array($query)){
            $count = count($row);
            $friends = $row['username'];
            $rank = findRank($friends, "$table");
            $sql = mysql_query("SELECT * FROM skills WHERE playerName LIKE '$friends' ORDER BY '$xptype' DESC") or die(mysql_error());unset($myFriends);
            while($skillsRow = mysql_fetch_array($sql)){
unset($myFriends); 
                for ($i = 1; $i <= $count; $i++){
                    $myFriends[] = array(
                        'friend' => $friends,
                        'xp' => $skillsRow[$xptype],
                        'lvl' => getLevelForXP($skillsRow[$xptype]),
                        'rank' => $rank,
                    );
                    $xpOrder[] = $skillsRow[$xptype];
                }
                array_multisort($xpOrder, SORT_NUMERIC, SORT_DESC, $myFriends);
                unset($xpOrder); 
                foreach ($myFriends as $data){
                    if(dots($data['xp']) !=0){
                    echo '
                    <a name="'.$data['rank'].'"></a>
                    <a href="compare.ws?user1='.$data['friend'].'" target="_self" class="row ">
                    <span class="columnRank">
                    <span>'.$data['rank'].'</span>
                    </span>
                    <span class="columnName">
                    <span>'.BBCode($data['friend']).'</span>
                    </span>
                    <span class="columnLevel">
                    <span>'.$data['lvl'].'</span>
                    </span>
                    <span class="columnXp">
                    <span>'.dots($data['xp']).'</span>
                    </span>
                    </a>'; 

                    }
                }
            }
        }
    }
于 2012-08-20T21:29:18.700 に答える