2015-06-19 62 views
-4

我有這個數組,我從數據庫中檢索數據,並把它放在一個數組:如何迭代多維數組並計算php中每行的總和?

$query = "select * from caseunder"; 
$result=mysql_query($query) or die('Error, insert query failed'); 
$array[] = array(); 
$numrows=mysql_num_rows($result); 
WHILE ($i < $numrows){ 
    $allergies =mysql_result($result, $i, "allergies"); 
    $vege = mysql_result($result,$i, "vege"); 
    $age = mysql_result($result, $i, "age"); 
    $bmi =mysql_result($result, $i, "bmi"); 
    $solution = mysql_result($result,$i, "solution"); 
    $bmi2 = $_POST['weight']/(($_POST['height']/100)*($_POST['height']/100)); 
    if($_POST['age']>18 && $_POST['age']<35) 
     $age2 = 'young '; 
    if($_POST['age']>40 && $_POST['age']<50) 
     $age2 = 'middle age '; 
    if($_POST['age']>60) 
     $age2 = 'old men '; 
    $array[] = array('age'=>$age2,'allergies'=>$allergies,'vege'=>$vege,'bmi'=>$bmi2,'solution'=>$solution); 

    i++ 
} 

的話,我想那陣列輸入我輸入的每個元素比較和計算總和陣列的每行:

foreach($array as $cases) { 

    if($cases['allergies'] == $_POST['allergies']){ 
     $count = 1; 
    } 

    if($cases['vege'] == $_POST['vege']){ 
     $count1 = 1; 
    } 

    if($cases['bmi'] == $bmi2) 
     $count2 = 1; 

    if($cases['age'] == $age2) 
     $count3 = 1; 

    $sum = $count + $count1 + $count2 + $count3; 
    echo $sum; 
} 

可以說,我已經進入了年齡,體重指數,過敏和蔬這是所有像數據庫的第一行中,總和應該是輸出爲4,因爲4相同的數據進行比較一樣。在這種情況下,我嘗試,數據庫的每一行應該有不同的總和,因爲它不是所有的same.But我沒有得到我想要的輸出,這是錯誤的輸出的例子:

0 
4 
4 
4 
4 
4 
4 
4 
4 

(假設我的phpmyadmin中有8行數據庫) 數據庫的第一行經過手動比較後,總和爲4,但它似乎繼續循環下一行時採用與prev行相同的數量。

+1

實際上,您是如何縮減代碼的,或者是格式化程序出了什麼問題? – GolezTrol

+0

是的。它出什麼問題了? @GolezTrol – Hazira

+0

你需要清理你的代碼。我可以看到兩個未定義的變量。 $ age2和$ bmi2。並且WHILE循環中的計數器不會增加,WHILE循環也不會關閉。 – BigScar

回答

0

當你做這個循環:

foreach($array as $cases) { 

    if($cases['allergies'] == $_POST['allergies']){ 
     $count = 1; 
    } 
    if($cases['vege'] == $_POST['vege']){ 
     $count1 = 1; 
    } 
    if($cases['bmi'] == $bmi2) 
     $count2 = 1; 
    if($cases['age'] == $age2) 
     $count3 = 1; 
    $sum = $count + $count1 + $count2 + $count3; 
    echo $sum; 
} 

你是不是重置$count$count1等迭代之間的變量。這就是爲什麼

當它繼續循環下一行採取與prev 行相同的金額。

我會說你可能甚至不需要這些單獨的變量,除非你使用它們的其他東西不包括在問題中。您可以將每次重複的總和初始化爲零,如果條件匹配,則直接遞增。

foreach($array as $cases) { 
    $sum = 0; 
    if($cases['allergies'] == $_POST['allergies']){ 
     $sum++; 
    } 
    if($cases['vege'] == $_POST['vege']){ 
     $sum++; 
    } 
    if($cases['bmi'] == $bmi2) { 
     $sum++; 
    } 
    if($cases['age'] == $age2) { 
     $sum++; 
    } 
    echo $sum; 
} 

順便說一下,它看起來像你設置bmi和第一次循環的年齡將使這些值始終匹配。我不確定這是你的意圖,但似乎不太可能。

0

這是錯誤的:

foreach($array as $array) 

你把多維數組,由命名$array,並在它的每個項目,這也被分配給$array迭代。這是要求奇怪的行爲。使用一個不同的變量。數組變量不具有被命名爲$array

+0

我改變了它,但輸出仍然是相同的@GolezTrol – Hazira

0
// Start variable sum  
    $sum = 0: 
// For each $_POST[] in array 
    foreach($_POST as $key => $value){ 
// If Key in $_POST exists add sum 
     if(array_key_exists($key,$array)){ 
     ++$sum; 
     } 
    } 
echo $sum;