在PHP中拆分由api形成的数组

时间:2013-12-16 00:18:41

标签: php arrays

我正在为游戏制作一些统计跟踪代码(是的,这是runescape。起诉我)。

我想使用api从高分中提取信息,这会产生一个看起来像这样的数组(使用print_r捕获)

Array
(
    [getHiscore] => Array
        (
            [overall] => Array
                (
                    [rank] => 61995
                    [lvl] => 2273
                    [totalxp] => 193310588
                )

            [attack] => Array
                (
                    [rank] => 93406
                    [lvl] => 97
                    [totalxp] => 11747494
                )

......等等。 我的问题是我怎样才能把这个api给我的东西放到数据库表中;我希望为特定用户获取此类数组,并使用它更新其统计信息。 我会用爆炸吗?这对我来说似乎是个正确的想法,但我怎么会用它来分割单独的数字和单词呢?

我的数据库尚未完全实现,但每条记录将包含一个用户名,然后是27个“技能”中的每个级别和总xp。这几乎肯定不是数据库设计的最佳实践,但我是新手,因为它是我能做的最好的。

3 个答案:

答案 0 :(得分:0)

只需使用foreach循环拉出数组并编写一些sql来插入数据。我对您的数据库一无所知,所以如果您需要帮助,请更新您的问题。

最简单的方法:

foreach($highscores as $highScoreType => $highScoreValues){
    $rank = $highScoreValues['rank'];
    $lvl = $highScoreValues['lvl'];
    $totalXp = $highScoreValues['totalxp'];

    //then it's up to you to put it into a table somehow.
}

$ highScoreType将包含“整体”,“攻击”等值

当遍历关联数组(哈希映射/哈希表,实际上所有PHP数组都在下面)时,foreach循环的这种格式非常方便,它不仅可以获取指向条目的当前值,也是该条目的关键。

因此,假设我们有一个带有键'foo'和值'bar'的条目哈希映射。如果我想显示'bar',我会很简单

echo $map['foo'];//will output 'bar'

如果我将它放入上述类型的foreach循环

foreach($map as $fooKey => $barValue) {
    echo $fooKey;//outputs 'foo'
    echo $barValue;//outputs 'bar'
}

答案 1 :(得分:0)

假设这全部存储在变量$ary中:

$ary['getHiscore']['overall']['rank'] = 61995;
$ary['getHiscore']['overall']['lvl'] = 2273;
$ary['getHiscore']['overall']['totalxp'] = 193310588;

$ary['getHiscore']['attack']['rank'] = 93406;
$ary['getHiscore']['attack']['lvl'] = 97;
$ary['getHiscore']['attack']['totalxp'] = 11747494;

所以,要获得这些值,它是:

$attackLevel = $ary['getHiscore']['attack']['lvl'];

如果你

echo $attackLevel;

它将是97

答案 2 :(得分:0)

你不需要爆炸。它是一个阵列,因此它已经爆炸了。您需要遍历它以构建有意义的查询。

我不熟悉runescape所以我不知道你的例子是否只显示你需要丢弃某些部分的相关字段。如果它是前者,那么你应该尝试像

这样的东西
$query="insert into stats_table (description, rank, lvl, totalexp) values (:description, :rank, :lvl, :totalext);";
$Statement = $DBConn->prepare($query);

foreach($fullArray as $description=>$subArray) {
    $Statement->bindValue(':description',$description, PDO::PARAM_STR);
    foreach($subArray as $key=>$value) {
        $Statement->bindValue($key,$value, PDO::PARAM_STR);
    }
    $Statement->execute();
}

这将插入包含

的两行
overall    61995    2273    193310588
attack    93406    97    11747494

PD:对于您正在使用的数据库引擎,$ DBConn是PDO connection instance