数组/数据更改

时间:2012-08-19 06:03:52

标签: php arrays function explode dynamic-arrays

我正在开发一个战队网站: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&lt; - Link  包含user.php?u = someid

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

我打破了网址,从他们的个人资料链接中获取“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']);

由于

2 个答案:

答案 0 :(得分:2)

您需要使用preg_match_all()

例如:for all script

$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的所有结果,其他结果相同,然后合并数组,因为所有结果在每个数组中都有相同数量的元素。

答案 1 :(得分:0)

只需更改echo To&gt;的值即可$#echo_ $ expl_Levelname&lt;如果您使用的是Joomla或JavaScript ......它肯定会起作用...下面回复