1

我正在开发一个部落网站:piratesofpopulous.comli.com/ 这是一个游戏的部落网站,我想获取部落成员的游戏历史并显示在他们的个人资料页面上,您可以在这里查看:

http://piratesofpopulous.comli.com/user.php?username=Waleed

该页面没有为用户发布,我仍在努力。问题是我使用了explode方法来爆炸这个页面:http ://www.popre.net/game.php?u=38456 。然后使用保存游戏的数组,即$expl[596]。

我正在使用这段代码:

//Breaking the URL
$url = "$profile_link"; <-- This profile link will be driven from the database, Its saved when user is registered.
parse_str( parse_url( $url, PHP_URL_QUERY), $params);

//After Breaking putting the value of u in function
function gameStats($u)
{
$result = file_get_contents('http://popre.net/game.php?u='. $u . '');
$expl = explode('"',$result);

echo"<br>Level: $expl[580]<br>";
echo"Players: $expl[596]<br><br>";
echo"Result: $expl[584]<br><br>";
echo"Points: $expl[586]<br><br>";
}
gameStats( $params['u']);

我打破了网址,因为用户使用这样的网址注册,即:www.popre.net/user.php?u=38456 <-- 链接包含 user.php?u=someid

但是游戏保存在 game.php 而不是 user.php 即:www.popre.net/game.php?u=38456 <-- game.php/u=same_user_id

我打破了 url 以从他们的个人资料链接中获取“u”的值,然后将其放入 game.php 以获取数组,然后显示选择性数组......

您可以通过以下方式查看所有数组:

print_r($expl);

但问题是,在几分钟内,例如爆炸数组 $expl[596] 更改为包含其他数据的其他内容,即 $expl[580],但再过几分钟它又变回 $expl[596]。然后正确显示数据和游戏。您可以在此处查看我显示这些内容的页面:http: //piratesofpopulous.comli.com/user.php ?username=Waleed 我仍在努力。

那么,有没有什么办法可以得到完美的数组编号所以数据永久显示而不显示任何其他数据呢?

或者如果数组发生更改,还有其他任何有效的方法?

还是别的什么?

任何帮助都会对我有好处......

编辑:

我这样做是为了获取地图(游戏关卡)、玩家、结果和积分。但经过一段时间后,爆炸数组即:Player $expl[600]; 更改为 $expl[596],它一直在变化,但有时它会回到 $expl[600]。在它不断变化的同时,是否仍然可以从中获取数据?

这是我正在使用的代码:

            $url = "$profile_link"; <-- You can use this profile link http://popre.net/user.php?u=38456
            parse_str( parse_url( $url, PHP_URL_QUERY), $params);
            function gameStats($u)
            {
            $result = file_get_contents('http://popre.net/game.php?u='. $u . '');
            $expl = explode('"',$result);

            echo"<div id='games'>";
            echo"<h3>Game 1</h3>";
            echo"<div class='data'>Level:    $expl[584]</div><br>";
            echo"<div class='data'>Player:   $expl[600]</div><br><br>";
            echo"<div class='data'>Result:   $expl[588]</div><br><br>";
            echo"<div class='data'>Points:   $expl[590]</div><br><br></b>";
            echo"</div>";

            }
            gameStats( $params['u']);

谢谢

4

2 回答 2

2

您需要使用preg_match_all()

例如:对于所有脚本

$url = "www.popre.net/user.php?u=38456";
parse_str( parse_url( $url, PHP_URL_QUERY), $params);

function gameStats($u){
    $result = file_get_contents('http://popre.net/game.php?u='. $u . '');
    $return = array();
    $pattern = "\<td rowspan=\"2\" class=\"gamelevel\">\<span><a href=\"(.*)\">(.*)<\/a><\/span>\n(.*)<a href=\"(.*)\">(.*)<\/a><\/td>\n(.*)<td class=\"gamepointsresult dgame(.*)\">(.*)<\/td>(.*)<td class=\"gamepoints\">(.*)<\/td><td class=\"gamepoints\">(.*)<\/td><td class=\"gamepoints\">(.*)<\/td>\n(.*)<tr class=\"(one|two)\"><td colspan=\"4\" class=\"gameplayerssmall\">(.*)vs.(.*)<\/td>\<\/tr>";
    $match = preg_match_all('/'.$pattern.'/', $result, $matches);

    /* level */      foreach($matches[2] as $num => $one){ $return[$num]['level'] = $one; }
    /* map */        foreach($matches[5] as $num => $one){ $return[$num]['map'] = $one; }
    /* result */     foreach($matches[8] as $num => $one){ $return[$num]['result'] = $one; }
    /* points */     foreach($matches[10] as $num => $one){ $return[$num]['points'] = strip_tags($one); }
    /* mu */         foreach($matches[11] as $num => $one){ $return[$num]['mu'] = strip_tags($one); }
    /* sigma */      foreach($matches[12] as $num => $one){ $return[$num]['sigma'] = strip_tags($one); }
    /* player1 */    foreach($matches[15] as $num => $one){ $return[$num]['player1'] = strip_tags($one); }
    /* player2 */    foreach($matches[16] as $num => $one){ $return[$num]['player2'] = strip_tags($one); }

    return $return;
}

$gameInfo = gameStats($params['u']);

echo "<table border='1'>
        <tr>
            <td>NO</td><td>LEVEL</td><td>MAP</td><td>RESULT</td><td>POINTS</td><td>MU</td><td>SIGMA</td><td>Player 1</td><td>Player 2</td>
        </tr>\n";

foreach($gameInfo as $num => $one){
    echo "<tr>
        <td>".($num+1)."</td><td>".$one['level']."</td><td>".$one['map']."</td><td>".$one['result']."</td><td>".$one['points']."</td><td>".$one['mu']."</td><td>".$one['sigma']."</td><td>".$one['player1']."</td><td>".$one['player2']."</td>
    </tr>\n";
}

echo "</table>";

您将获得其中的所有结果,array其他结果相同,然后组合数组,因为所有结果在每个数组中都具有相同数量的元素。

于 2012-08-19T09:13:41.417 回答
0

只需将 echo 的值更改为 > $#echo_$expl_Levelname < 如果您使用的是 Joomla 或 JavaScript...它肯定会工作...在下面回复

于 2012-09-19T13:19:07.953 回答