2013-08-20 61 views
-1

我有一個從我的數據庫查詢結果看起來像這樣,當轉儲和查詢正在做預期的,但我有一個小問題,獲取數組值。我正在使用PHP PDO來獲取結果。如何從多維數組中獲得值

$result = $_stmt->fetchAll(); 
$row = count($result); 

print_r($result); 

Array ([0] => Array ([SUM(od_price * od_qty)] => 69.85 [0] => 69.85) 
     [1] => Array ([SUM(od_price * od_qty)] => 13.97 [0] => 13.97) 
     ) 69.8513.97 

您可以看到結果包含一個數組和一個字符串值。我有一個選項來獲取數組或字符串值。但我寧願獲取數組值,因爲字符串值都是收集的。有人可以解釋我在做什麼在foreach循環中是錯誤的嗎?

if($row == 2) 
{    
    foreach ($result as $k) 
    { 
     echo $price_1 = $k[0][0]; // expected 69.85 
     echo $price_2 = $k[0][1]; // expected 13.97 

    }  
    unset($k); 
} 

我需要得到預期的值,但我得到的是所有的字符串值都收集。

在回顧了下面的解決方案之後,我想到了這一點,這對我所想要的很有效。

 $result = $_stmt->fetchAll(); 
     $row = count($result); 

     $price = ""; 

     if($row == 2) 
     {    
      foreach ($result as $k) 
      { 
       $price .= $k[0].','; 
      }   
     } 

     // remove the last comma 
     $price = substr($price, 0, -1); 

     list($totalPurchase, $shippingCost) = explode(",",$price); 

     $orderAmount = $totalPurchase + $shippingCost; 

     echo 'The amount is: '.$orderAmount; 
+0

但是,一切都很好,你只打印值,使他們出現。 –

回答

0

本替換你的循環:

foreach ($result as $k) // iterate through all datasets 
{ 
    echo $k[0];  // echo price of dataset 
} 
+0

感謝您的快速響應,但我之前嘗試過,它輸出字符串值69.8513.97。我需要得到69.85和13.97分開。 –

+0

@CarlBarrett要分離出一些東西,你必須輸出一個分隔符 –

1

嘗試在陣列中存儲的值,而不是附和他們..

$price_1 = array(); $price_2 = array(); 
if($row == 2) 
{    
    foreach ($result as $k) 
    { 
     array_push($price_1, $k[0][0]); // expected 69.85 
     array_push($price_2, $k[0][1]); // expected 13.97 
    }  
// print_r($price_1); //should store all the price1s 
// print_r($price_2); // should store all the price2s. 
// uncomment to these lines to view array contents 
} 
+0

好主意,非常感謝,但答案並不完全符合我的要求,請參閱上面問題的解決方案。 –

1

雖然你需要學習的多維數組和foreach一般來說,要解決這個特殊的任務,你需要使用fetchAll而不需要附錄:

$result = $sth->fetchAll(PDO::FETCH_COLUMN, 0); 
foreach ($result as $k) 
{ 
    echo $k; 
} 
+0

我的朋友,沒有一個開發人員知道一切。所以不需要告訴人們需要去學習什麼。你的解決方案沒有什麼幫助。開發人員有時會腦死亡,開始寫垃圾,這可能發生在我們身上。我們來到這個網站尋找想法,讓我們再次開始思考。 達里爾吉爾提供了最好的想法,引起了我的注意,請參閱下面的解決方案: –

0

它已經被回答了,但是我在評論中看到你希望他們分開。所以,你的迴音後只是Concat的一個"<br>"或新行空間:

foreach ($result as $k) 
{ 
    echo $k[0]."<br>"; 
} 
+0

感謝您啓動我的大腦。我不知道爲什麼我以前沒有想到...(漫漫長夜)!我在我的應用程序中做了很多次,所以我在上面的問題後面追加了一個解決問題的方法。我希望它可以幫助別人。 –