質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.23%

テーブル内のデータを個数分合計する

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 221

toll_tree

score 31

データベース内の値を、個数分合計するような処理を考えているのですが、うまくいきません。
以下は、自分が作成中のcart.phpになります。

<?php

include 'shop_class.php';

error_reporting(E_ALL);
ini_set("display_errors",1);
session_start();
if(!isset($_SESSION['id'])){
  header('Location:login.php');
}

$shop = new Shop('mysql:host=localhost;dbname=ec_website','root','12345');

$user_id = intval($_SESSION['id']);
if($_POST){
  // var_dump($_POST);
  // exit();

  $product_name = $_POST['name'];
  $img = $_POST['img'];
  $price = $_POST['price'];
  $product_id = intval($_POST['product_id']);
  $item_check = $shop->cart_check($user_id,$product_id);


  if(!$item_check){
    // try{
      $shop->add_select_item($user_id,$product_id);
    // }catch(PDOException $e){
    //   echo $e->getMessage();
    // }

    echo __LINE__;
    //exit();

  }else{
    $shop->update($product_id);
    echo __LINE__;
    //exit();
  }

}

$item_list = $shop->cart_list($user_id);
// var_dump($item_list);
// exit();
//exit();
// foreach($item_list as $item){
//   //var_dump($item);
//   $item_info[] = $shop->cart_item_info($item['item_id']);
// }
//var_dump($item_info);

foreach($item_list as $item){
  $item_info_list[] = $shop->item_info_list($item['item_id']);
}
// var_dump($item_info_list);
// exit();
// $sum_price = array_sum(array_column($item_info_list,'price'));
// var_dump($sum_price);
// exit();

$sum_price = 0;

for($i = 0; $i < count($item_info_list); $i++){
    for($j = 0; $j < $item_list[$j]['amount'];$j++){
      var_dump($item_info_list[$j]['amount']);
      $sum_price += $item_info_list[$i]['price'];    


    }

}
var_dump($sum_price);
exit();
//  $test = $item_list[0];
//  var_dump($test);
//  exit();
?>


上記コードの$item_info_listの中身は下記になります。

「array(4) { [0]=> array(3) { ["name"]=> string(18) "テスト" ["price"]=> int(100) ["img"]=> string(53) "./images/f0ab631298df0117d17f6c91955a0be7129de339.jpg" } [1]=> array(3) { ["name"]=> string(7) "test111" ["price"]=> int(1000) ["img"]=> string(53) "./images/4a60837fe9c460ed404f490ca86a61d7c936613b.jpg" } [2]=> array(3) { ["name"]=> string(8) "t-shirt2" ["price"]=> int(1000) ["img"]=> string(53) "./images/cccacab372172c1f63c1351d95df9e792fdd4002.jpg" } [3]=> array(3) { ["name"]=> string(4) "test" ["price"]=> int(1000) ["img"]=> string(53) "./images/a482e68f5a960d0a2c47b8819a178b8b4f21c87c.jpg" } }」


$item_listの中身は以下になります。
「array(4) { [0]=> array(2) { ["item_id"]=> int(13) ["amount"]=> int(23) } [1]=> array(2) { ["item_id"]=> int(15) ["amount"]=> int(2) } [2]=> array(2) { ["item_id"]=> int(17) ["amount"]=> int(1) } [3]=> array(2) { ["item_id"]=> int(14) ["amount"]=> int(2) } }」

$item_info_list['price']の中身を、$item_list['amount']の個数分、増加させたです。
何か良い方法は、ありませんでしょうか?
どなたかご教示いただけましたら幸いです。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m6u

    2019/05/03 20:08

    var_dump()の出力は改行やインデントが潰れてつながってたり型の説明がついたりして、人が目てみて把握しやすい(それが目的だからね)のだけど、それを受けて第三者がなにか試すとき、結局全部書き直さないと行けなくて困る。serialize()した文字列で貼ってくれれば、第三者もテストしやすいのではないかと、ふと思った。第三者にテストしてもらうためには、どういう情報の出し方が敷居が低くなるかって、考えたことある?

    キャンセル

  • sazi

    2019/05/04 05:27

    SQLで処理する案件だと思うのですが?
    それが出来ない理由があるならそれを解決した方が早いと思います。

    キャンセル

  • toll_tree

    2019/05/04 05:43

    「serialize()した文字列」というのは、どういう文字列でしょうか?
    そうですね。第三者に分かってもらえなければ意味がないですよね

    キャンセル

回答 3

0

よくわかんないけど、こういうこと?

for($i = 0; $i < count($item_info_list); $i++){
  $arr = [];
  for($j = 0; $j < $item_list[$j]['amount']; $j++){
    $sum_price += $item_info_list[$i]['price'];
    $arr[] = $item_info_list[$i]['price'];
  }
  $item_info_list[$i]['price'] = $arr;
}


これで増えそうな気がするけど。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/03 20:26

    あくまで机上。実データを使ってテストするのが面倒な質問なので。

    キャンセル

  • 2019/05/04 05:42

    ご回答ありがとうございます。
    質問の仕方が悪くて、申し訳ないです。
    「for ($i=0; $i<count($item_info_list); $i++) {
    $sum_price += $item_info_list[$i]['price'] * $item_list[$i]['amount'];
    }」
    こちらの式で、sum_priceに、$item_info_list['price']の$item_list['amount']分合計した値を格納することができました。

    キャンセル

0

意図が分かりづらいけどこんな感じ?

for ($i=0; $i<count($item_info_list); $i++) {
    $item_info_list[$i]['price'] = $item_info_list[$i]['price'] * $item_list[$i]['amount'];
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/04 05:55

    頂きました、ご回答を元に、解決することができました。
    ありがとうございました。

    キャンセル

check解決した方法

-3

ご回答者様に頂きました回答を元に、下記のコードにて、$item_info_list[$i]['price'](値段)の$item_list[$i]['amount'](個数)分の合計を、$sum_priceに代入し、for分にて、$item_info_list[$i]の['price']の合計値を求めることができました。
質問が伝わりづらく、すみませんでした。

for ($i=0; $i<count($item_info_list); $i++) {
  $sum_price += $item_info_list[$i]['price'] * $item_list[$i]['amount'];
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る