-1

ダンプ時にこのように見える db クエリの結果があり、クエリが期待どおりに実行されていますが、配列値を取得するのに少し問題があります。結果を取得するために 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;
4

4 に答える 4

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
}
于 2013-08-20T13:59:01.537 に答える
1

一般的に多次元配列と foreach を学ぶ必要がありますが、この特定のタスクを解決するにはfetchAll、少し補遺を使用する必要があります。

$result = $sth->fetchAll(PDO::FETCH_COLUMN, 0);
foreach ($result as $k) 
{
    echo $k;
}   
于 2013-08-20T14:00:05.120 に答える
0

すでに回答されていますが、コメントでそれらを分けてほしいと見ました。したがって"<br>"、エコーの後に a または改行スペースを連結するだけです。

foreach ($result as $k)
{
    echo $k[0]."<br>";
} 
于 2013-08-20T14:06:09.620 に答える
0

ループを次のように置き換えます。

foreach ($result as $k)  // iterate through all datasets
{
    echo $k[0];     // echo price of dataset
}  
于 2013-08-20T13:54:27.203 に答える