2011-08-05 37 views
1

我從一個MySQL表通過拉一些數據如下:操縱的MultiArrays

$result = mysql_query("SELECT characters_ID, name, borndate, deathdate, marrieddate, ispregnant FROM characters WHERE isfemale='1'",$db); 
$femaledata = array(); 

while ($row_user = mysql_fetch_assoc($result)) 
$femaledata[] = $row_user; 

這給了我一個數組,看起來像這樣:

Array ( 
    [0] => Array ([characters_ID] => 2 [name] => Helene [borndate] => 35 [deathdate] => 431 [marrieddate] => 157 [ispregnant] => 0) 
    [1] => Array ([characters_ID] => 4 [name] => Isabelle [borndate] => 161 [deathdate] => [marrieddate] => 303 [ispregnant] => 1) 
    [2] => Array ([characters_ID] => 7 [name] => Helene [borndate] => 326 [deathdate] => [marrieddate] => [ispregnant] => 0) 
    [3] => Array ([characters_ID] => 72 [name] => Faylinn [borndate] => 335 [deathdate] => [marrieddate] => [ispregnant] => 0) 
    [4] => Array ([characters_ID] => 74 [name] => Relina [borndate] => 349 [deathdate] => [marrieddate] => [ispregnant] => 0) 
    ) 

現在我需要刪除的任何字符誰對deathdate或ispregnant有價值,然後我需要在其他人上運行一些代碼。例如,我需要抓住邊緣值,將其與當前日期進行比較以找到年齡,並且部分基於年齡,我需要運行代碼以確定角色在回合中是否已經懷孕。

道歉,這似乎是一個長期存在的問題。多維數組似乎仍然讓我感到困惑。

編輯:(問題需要更清晰)

能否請你建議我要麼爆發的最好辦法還是打破了數組,然後做有條件的修改數據,或代替我怎麼會刪除不需要的數據,然後對數據進行有條件的修改。

我的最終輸出這裏將採取適當的女性角色(不是死或已懷孕),並根據他們的年齡,讓他們在懷孕的機會。如果爲true,我會在SQL數據庫中放回一些代碼來更新該字符。

謝謝!

+0

林不知道我明白,但爲什麼不更改SQL來匹配您的輸出要求?是否絕對有必要從陣列中刪除? –

回答

1

相反,如果立即從陣列中刪除一些行,請嘗試限制通過SQL收到的數據。

可以遍歷您的數組是這樣的:

foreach($femaledata as $female) 
{ 
echo $female['name']; 
} 
+1

應該指出的是,foreach循環對數據的副本進行操作,所以如果jeremy想要在循環時操作數據(聽起來像他一樣),他將需要使用引用,如下所示:foreach($女性作爲&女性){...} –

0

你的意思是這樣?

現在我需要刪除誰擁有deathdate或值 任何字符ispregnant

只需添加一些:

  $femaledata = array(); 
      while ($row_user = mysql_fetch_assoc($result)) { 
       $ok = false; 
       // do you validation for every user 

       if($ok) array_push($femaledata,$row_user); 
      } 
2

所有你需要的也許可以得到與SQL做的事情您的WHERE條件的參數:

isPregnant IS NULL AND deathdate IS NULL 

比如我需要搶borndate值,將其比作 當前日期查找年齡

根據您的字段格式的數學可以在SQL中完成的,有看向DATE function of mysql

不要低估你的sql服務器的力量,99%的時間可能比php更快地處理數據集。

+0

這是非常有用的,謝謝。 – jeremy

0

TJHeuvel給了你正確的答案,你應該接受這個答案。但是,要通知:多維數組不需要混淆。讓我看看我能否解釋。

在PHP中,您可以將任何對象都放入數組中,包括其他數組。所以,假設你有一個包含其他數組的數組。當你使用循環結構(通常是一個foreach循環)迭代數組時,循環的每次迭代都會給你另一個數組;如果您想訪問此子陣列的元素,只需循環它。這被稱爲嵌套循環。例如:

$r = array(
     array(1,2,3), 
     array(4,5,6), 
     array(7,8,9) 
    ); 

foreach ($r as $cur) { 
    foreach ($cur as $num) { 
     echo $num; 
    } 
} 

在外部循環的每次迭代中,$cur包含的陣列;內部循環遍歷這個數組的內容。這種技術可以讓你處理任何維度的數組。

但是,在您的具體情況下,您不需要使用內部循環遍歷子數組。你只需要通過他們的密鑰訪問你的子陣列中的某些元素,而不是依次處理它們。所以,一個簡單的foreach循環會做。