如何为数组中的每个字段赋予自己的变量

时间:2015-04-04 12:02:46

标签: php pdo

我正在开发一个基于小文本的网络游戏,供一些朋友玩(怀旧),但我在游戏的核心,攻击/防守方面遇到了麻烦。

每个玩家拥有每种部队类型的x数量(更多可以购买并且将在atk / def上丢失) 到目前为止,我有一个包含部队类型和统计数据的表格,以及一个与用户ID和部队ID相关联的部队数量表。

我使用用户ID来获取部队ID和数量使用;

//获取攻击者部队数量。

$i = 0;
$attacker_deets = $conn->prepare("SELECT * FROM troop_qty WHERE user_id= :attacker_id");
$attacker_deets->bindParam(':attacker_id', $attacker_id);
$attacker_deets->execute();

    $attacker_deets_results = $attacker_deets->fetchAll(PDO::FETCH_ASSOC);
        foreach($attacker_deets_results as $atk_key=>$atk_result) {
             echo "<pre>"; var_dump($atk_result); echo "</pre>";
        }

输出;

array (size=4)
    'troop_qty_id' => string '1' (length=1)
    'user_id' => string '2' (length=1)
    'troop_id' => string '1' (length=1)
    'qty' => string '100' (length=3)

array (size=4)
    'troop_qty_id' => string '2' (length=1)
    'user_id' => string '2' (length=1)
    'troop_id' => string '2' (length=1)
    'qty' => string '100' (length=3)

然后我使用部队ID来获取部队细节;

//获取攻击者队伍详情。

    $attacker_troop_deets = $conn->prepare("SELECT * FROM troops WHERE troop_id= :atk_troop_id");
    $attacker_troop_deets->bindParam(':atk_troop_id', $attacker_deets_results[$i]['troop_id']);
    $attacker_troop_deets->execute();
    $returned_results = $attacker_troop_deets->fetchAll(PDO::FETCH_ASSOC);
        foreach($returned_results as $key=>$result) {
             echo "<pre>"; var_dump($result); echo "</pre>";                
        }
    ++$i;

总共给了我;

array (size=4)
  'troop_qty_id' => string '1' (length=1)
  'user_id' => string '2' (length=1)
  'troop_id' => string '1' (length=1)
  'qty' => string '100' (length=3)

array (size=4)
  'troop_id' => string '1' (length=1)
  'troop_name' => string 'Fist Puncher' (length=12)
  'troop_atk' => string '1' (length=1)
  'troop_def' => string '1' (length=1)

array (size=4)
  'troop_qty_id' => string '2' (length=1)
  'user_id' => string '2' (length=1)
  'troop_id' => string '2' (length=1)
  'qty' => string '100' (length=3)

array (size=4)
  'troop_id' => string '2' (length=1)
  'troop_name' => string 'Stick Waver' (length=11)
  'troop_atk' => string '2' (length=1)
  'troop_def' => string '1' (length=1)

现在我被困住了,我需要能够将First Puncher的troop_atk与Stick Waver的防御进行比较,这是从一组不同的重复查询得到防御者的细节,我还需要能够乘以和除以atk和def变量。

那我该如何实现呢?我会假设我需要给数组中的每个字段自己的变量,但是如何?我尝试过使用$ {&#34; troop_name&#34; 。 $ i} = $ attacker_deets_results [$ i] [&#39; troop_name&#39;];但它只输出最后输入的名字。

任何帮助都会令人惊叹。感谢。

编辑:为了清理一点,我的目标是获得部队数量并将其乘以atk和def,然后使用这些数字用来自防御玩家的相同字段做一些其他的数学运算我是&#39; ll用来减少数量字段。

1 个答案:

答案 0 :(得分:0)

也许您可以稍微修改一下代码并执行以下操作。

在一个查询中获取有关用户部队的数据:

    $results = $conn->query("SELECT troop_qty.user_id as uid, troop.troop_id, troop.troop_name, troop_qty.qty, troop.troop_atk, troop.troop_def FROM troop_qty join troop on troop.troop_id=troop_qty.troop_qty_id WHERE troop_qty.user_id=:attacker_id

创建一个新数组,其中包含有关所有用户部队的信息:

$userData = array(
    'id' => $attacker_id,
    'troops' => array());

while (($res = $results->fetch_assoc()) != null) {
    $troopData = array(
        'name' => $res['troop_name'],
        'qty' => $res['qty'],
        'atk' => $res['troop_atk'],
        'def' => $res['troop_def']);

    $userData['troops'][$res['troop_id']] = $troopData;
}

结果你会有这样的东西(vardump($ userData)):

array (size=2)
  'id' => int 2
  'troops' => 
    array (size=2)
      1 => 
        array (size=4)
          'name' => string 'Fist Puncher' (length=12)
          'qty' => string '100' (length=3)
          'atk' => string '1' (length=1)
          'def' => string '1' (length=1)
      2 => 
        array (size=4)
          'name' => string 'Stick Waver' (length=11)
          'qty' => string '100' (length=3)
          'atk' => string '2' (length=1)
          'def' => string '1' (length=1)

我不知道您希望以后在游戏中如何操纵数据,但我认为这样可以简化工作。

顺便说一下。我已经抛弃了fetchAll()函数,因为我个人认为将所有数据提取到内存然后修改它或对它做任何事情都不是一个好习惯。这会浪费内存,当你处理大量数据时,某些时候可能会给你带来一些麻烦。