2015-04-04 18 views
2

我正在爲幾個朋友玩一個基於小型文本的網頁遊戲(懷舊),但我遇到了遊戲的核心問題,進攻/防守。如何給陣列中的每個字段自己的變量

每個玩家有x部隊的每種類型(更多可以購買,並會在atk/def將會丟失) 到目前爲止我有一個表格,其中隊伍類型和統計數據以及與部隊數量關聯的表格和部隊編號。

我正在使用用戶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) 

現在在那裏我卡住是我需要能夠首先衝牀的troop_atk比較是從一組不同的重複查詢的越來越守軍細節得到堅持毫不動搖的防守,我也需要能夠對atk和def變量進行乘法和除法。

那麼我該如何去實現呢?我會假設我需要給數組中的每個字段自己的變量,但是如何?我曾嘗試使用$ {「troop_name」。 $ i} = $ attacker_deets_results [$ i] ['troop_name'];但它只輸出最後輸入的名稱。

任何幫助將是驚人的。謝謝。

編輯:爲了澄清一些事情,我的目標是獲得隊伍數量,並通過atk和def複數,然後使用這些數字與來自衛冕球員的相同領域做一些其他數學,我會用於減少數量字段。

+0

'$ i'是否增加過?在您的示例中看起來像它的外部循環。 – rockerBOO 2015-04-04 12:34:10

+0

他在bindParam()中使用它,所以它必須引用外層循環或其他東西,可能循環遍歷第一個結果 – AdamM 2015-04-04 12:40:37

+0

你看過'extract()'函數http://php.net/manual/en/function.extract .php – RST 2015-04-04 12:48:17

回答

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 

創建一個包含所有用戶的軍隊信息一個新的數組:

​​

至於導致你有這樣的事情( 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) 

我不知道你到底想怎麼樣稍後在遊戲中提取數據,但我認爲這會緩解工作。

Btw。我拋棄了fetchAll()函數,因爲我個人認爲將所有數據提取到內存中然後修改它或使用它做任何事情都不是一個好習慣。這是對內存的浪費,當你處理大量的數據時,在某些時候會造成一些麻煩。

+0

感謝您的清潔,對我來說,這是如此容易理解。雖然我怎麼去打電話給他們其中一個呢?它會是$ userData [部隊] [1] [名稱]? – 2015-04-04 15:56:00

+0

以獲取有關用戶的部隊的數據結構是像$ userData ['部隊'] [$ troopID]。那麼你將擁有所有關於請求隊伍的信息(名稱,攻擊,防守和數量)。如果你需要用部隊的名字來查找(我認爲這會更糟糕),你可以修改while循環,並把: $ userData ['troops'] [$ res ['troop_name']] = $ troopData; 並在$ troopData中保存部隊ID。希望它有助於:) – AdamM 2015-04-04 16:02:08

+0

啊,我需要通過atk和def來獲得數量和乘數,然後用相同類型的變量進行一些其他的數學計算,但是對於防禦玩家,然後根據數學(部隊死亡)改變數量,但是作爲一個數組newb我完全失去了。 – 2015-04-04 16:43:14

相關問題