• 締切済み

PHP 配列の計算で困っています。

PHP 配列の計算で困っています。 現在ショッピングカートをsmartyを使って作成しています。 連想配列の計算をしたいと思っているのですが、1日迷っています。 <?php $bookid = $_POST['bookid']; //削除ボタンが押下 if($_POST['sakuzyo']){ unset($_SESSION['cart'][$bookid]); } //数量 小計 合計金額取得 $suryo = $_POST['suti']; $nedan = $_SESSION['cart'][$bookid]['nedan']; $shoukei = $suryo * $nedan; //再計算ボタン押下 if($_POST['saikeisan']){ $_SESSION['cart'][$bookid]['suryou'] = $suryo; $_SESSION['cart'][$bookid]['shoukei'] = $shoukei; } //商品リスト取得 if(isset($_SESSION['cart'])){ $item = $_SESSION['cart']; print_r($item); Array ( [1] => Array ( [id] => 1 [boki] => 洋書 [bokt] => test洋書 [nedan] => 230000 [suryou] => 1 [shoukei] => 230000 ) [7] => Array ( [id] => 7 [boki] => 和書 [bokt] => test和書和書和書和書和書和書和書和書和書 [nedan] => 320 [suryou] => 1 [shoukei] => 320 ) ) } $goukeikingaku = 230000 + 320みたいな形で合計金額を 取得したのですが、わかりません。よろしくお願いします.。

みんなの回答

回答No.2

こんな感じでどうでしょうか? $goukeikingaku = 0; foreach ( $item as $book ) {   $goukeikingaku += $book['shoukei']; }

参考URL:
http://www.php.net/manual/ja/control-structures.foreach.php
keisuke1125
質問者

お礼

できました。ありがとうございます。 php勉強不足のようです。

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

> 連想配列の計算をしたいと思っている > $goukeikingaku = 230000 + 320 この式が何を表しているか良く判らないのですが…、 (連想配列も余り関係なさそうだし…、) 変数名から推測すると、$goukeikingakuにどんどん足していきたい?んでしょうか。 それなら、 $goukeikingaku = $goukeikingaku + 320; だと思いますが。後は、cartの中が空になるまでループで回す。

関連するQ&A

  • 連装配列の展開について

    いつも拝見し勉強させていただいております。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2202793 で質問させていただき、無事にセッションに配列を 入れ込むことができたのですが、今度は展開することが できませんでした。 セッションに配列を入れるソースは以下のとおりです。 $_SESSION['cart'][商品コード] = array('商品名'=>$_POST['商品名'],'値段'=>$_POST['値段'], '購入数'=>$_POST['購入数'],'商品サイズ'=>$_POST['商品サイズ'],); これを別ページで一つ一つのデータに展開しようとするのですがうまくいかず困っております。 申し訳ございませんがお知恵をお貸しください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • <?php

    <?php session_start(); $_SESSION['name'] = $_POST['name']; $_SESSION['kana'] = $_POST['kana']; $_SESSION['nick'] = $_POST['nick']; $_SESSION['sex'] = $_POST['sex']; $_SESSION['pass'] = $_POST['pass']; $_SESSION['pass2'] = $_POST['pass2']; $_SESSION['mail'] = $_POST['mail']; if(empty($_SESSION['name'])) { $_SESSION['error'] = '名前を入力して下さい'; } if(empty($_SESSION['kana'])) { $_SESSION['error'] = 'フリガナを入力して下さい'; } if(empty($_SESSION['pass'])) { $_SESSION['error'] = 'パスワードを入力して下さい'; } if(empty($_SESSION['pass2'])) { $_SESSION['error'] = '確認用パスワードを入力して下さい'; } if($_SESSION['pass'] and $_SESSION['pass2'] and ($_SESSION['pass'] != $_SESSION['pass2'])){ $_SESSION['error'] = 'パスワードが一致しません'; } if (preg_match("/^[a-zA-Z0-9]{4,12}$/", $_SESSION["pass"])){ $_SESSION['error'] = 'パスワードは半角英数字で入力して下さい'; } if(isset($_SESSION["error"])) { header("Location: regist.php"); exit; } else { header("Location: index.php"); exit; } ?> で、PCからみるとエラーメッセージがでるのですが、自分の携帯(ドコモ)でみるとエラーメッセージが表示されていません・・・ なぜでしょうか?><; フォーム画面のソースは <?php if (isset($_SESSION["error"])) { echo $_SESSION["error"]; session_destroy(); } ?> </font> <font size="2"> <form action="error_check.php" name="form" method="post"> //ここからフォーム内容 です。 ご教授のほど宜しくお願い致します><;;;;;;; 補足 >GETで、セッション名に、session_id()で取得した値を渡してやる必要があります。 それはいったいどうやるんですか?><; 簡単でいいのでソースとか記述してくださればわかりやすいです><; お願い致します><;

    • 締切済み
    • PHP
  • 同様の値があるか判別するには?

    ショッピングカートを作っており商品情報を以下のような セッション配列で管理しています。 Array ( [set] => Array ( [0] => Array ( [key] => 商品名A [num] => 1 [price] => 1980 ) [1] => Array ( [key] => 商品名B [num] => 1 [price] => 2980 ) [2] => Array ( [key] => 商品名C [num] => 1 [price] => 3980 ) ) ) やりたいことは既に持っているセッションの['key']と商品名の 変数が同様かどうかを判別し同様の値があった場合となかった 場合で分岐しそれぞれの処理をしたいです。 分岐後の処理はなんとかなるのですがどうやって判断すれば いいものかわかりません^^; $set = 'ここに商品名がはいります'; if (!count($_SESSION['set'])) { // セッションカウントがない場合 // (1つ目の商品をカートに入れた場合) // 値設定 $n = 0; $_SESSION['set'][$n]['key'] = $set; // その他の処理 } else { // セッションカウントがある場合 // (2つ目以降の商品をカートに入れた場合) // 値設定 $n = count($_SESSION['set']); if (!array_search($set, $_SESSION['set'][$n])) { // ここで同様の値があるか判別したい } if (***) { // 同様の値がある場合の処理 } else { // 同様の値がない場合の処理 } } 宜しくお願い致します。

    • 締切済み
    • PHP
  • PHPでセッションを使った受け渡しについて

    PHPでECサイトのカート機能を作っています。 まず商品一覧画面(index.php)にデータベースから読み取ったidとNAME、そして個数、サイズ、包装の有無のセレクトボックスを表示します。 それぞれの商品の追加ボタンを押すとカートのphp(t_cart.php)に飛んで上記の情報を全て表示できるようにしたいのですが、idとNAMEと個数の情報は受け渡せるのですが、サイズや包装の有無は別の商品を追加すると全ての商品の情報が上書きされてしまいます。 コードの一部を記載しておきます。 まだPHPを始めたばかりで初歩的な事がわからないのですが、ぜひ御知恵をお貸しいただければとおもいます。 よろしくお願いします。 ・index.php <table> <?php foreach ($Menu as $g) { ?> <tr> <td> <p class="Menu"><?php echo $g['id'] ?></p> </td> <td> <p><?php echo $g['NAME'] ?></p> </td> <form action="t_cart.php" method="post"> <td> <a>個数:</a> <select name="num"> <?php for ($i = 1; $i <= 10; $i++) { echo "<option>$i</option>"; } ?> </select> </td> <td> <a>サイズ:</a> <select name="size"> <option>S</option><option>M</option><option>L</option> </select> </td> <td> <a>包装:</a> <select name="deco"> <option>有</option><option>無</option> </select> </td> <td> <input type="text" name="id" value="<?php echo $g['id'] ?>"> <input type="submit" name="submit" value="go to cart"> </td> </form> </tr> <?php } ?> </table> ・t_cart.php <?php require 'common.php'; $rows = array(); $sum = 0; $pdo = connect(); if (!isset($_SESSION['cart'])){ $_SESSION['cart'] = array(); } if (@$_POST['submit']) { @$_SESSION['cart'][$_POST['id']] += $_POST['num']; } foreach($_SESSION['cart'] as $id => $num) { $st = $pdo->prepare("SELECT * FROM Menu WHERE id=?"); $st->execute(array($id)); $row = $st->fetch(); $st->closeCursor(); $row['num'] = strip_tags($num); $row['size'] = $_POST['size']; $row['deco'] = $_POST['dough']; $rows[] = $row; } ?>

    • 締切済み
    • PHP
  • php ラジオボタンのデータの渡し方

    phpで自動販売機プログラムを作成しています。 ラジオボタンを使い120円または150円の飲み物を選択できるようにし、購入を押すとおつりを計算するものです。 これがhtml側のプログラムです。 <FORM ACTION="result.php" METHOD="POST"> <INPUT TYPE="RADIO" NAME="Juice" VALUE="nedan1" CHECKED>120円のジュースを購入します。お金を<INPUT TYPE="TEXT" NAME="money1" SIZE="5">円入れます。<BR> <INPUT TYPE="RADIO" NAME="Juice" VALUE="nedan2">150円のジュースを購入します。お金を<INPUT TYPE="TEXT" NAME="money2" SIZE="5">円入れます。<BR> <INPUT TYPE="SUBMIT" VALUE="購入"> これをphp側のプログラムで処理するさいラジオボタンでデータを渡したいのですがやり方がわかりません。 この場合120円の飲み物のおつり計算をしたいのです。 if($_POST['Juice'] = '$nedan1'){(想像) $sonyu = $_POST['money1']; こちらでは150円のほうの計算を。 elseif($_POST['Juice'] = '$nedan2'){ $sonyu = $_POST['money2']; このif文とテキストの渡し方の部分がこれでは動かないのでどなたかご教授ください。 環境はPHPDEV423を使っています。(Apache、Mysql)

    • ベストアンサー
    • PHP
  • ショッピングカートの作成しようと思ってます。

    今ショッピングカートの商品を選んでカートに入れたのち別のページに飛ばして精算させるプログラムを作ってますがプログラムがうまく作動しません。 ショッピングカートのプログラムは <?php if (isset($_POST['cart'])){ $_SESSION['cart'][$_POST('code')] += $_POST('num'); print "<p>カートに入れました。</p>\n"; } else if ($_POST['delete']) { $_SESSION['cart'] = array(); print "<p>カートを空にしました。</p>\n"; } ?> 精算プログラムのエラー箇所は以下の感じです。 foreach ($_SESSION['cart'] as $code => $num) { $rs = mysql_query($con, "select * from member7 where code=$code"); $row = array($rs); $ss = $num * $row['tanka']; print "<tr><td>{$row['name']}</td><td>{$row['tanka']}円</td><td>$num</td><td>{$ss}円</td></tr>\n"; $sum += $ss; } 長ったらしいですが解決策を教えてくださればと思います。 PHPは5.2.0を使用してください。

    • ベストアンサー
    • PHP
  • 配列のカウント

    こんにちは 初歩的な質問だとは思うのですが…教えて下さい 【 1.以下のような配列を作る 】 $array = array( "1-aaa", "2-aaa", "2-bbb", "2-ccc" ); 【 2.本日の日付を取得 】 $today = date("d",time()); 【 3. arrayの件数分forで回す 】 for ($i = 0; $i < count($array); $i++) { 【 4.explodeで分解 】 $items = explode("*",$array[$i]); 【 5.日付と配列[0]が一致した時に項目表示 】 if($today == $items[0]){ print $items[1]; } という処理を行った時に if($today == $items[0]) に該当するデータ件数というのは 求めることが出来ないものなのでしょうか (今日が2日として、この場合は「3」が欲しい) 前からこういう状況下で該当する件数を求めたい時があっても どうしたらよいのかわからなくて諦めていたのです 絶対ムリなら諦めるので、出来るのかどうか教えて頂けますか?? もし可能であれば、求め方のヒントも頂けると助かります よろしくお願い致します!!

    • ベストアンサー
    • PHP
  • PHP 多次元配列変数のデータ受け渡し。

    PHP 多次元配列変数のデータ受け渡し。 こんばんは。 先日からPHPでホームページを作成しています。 この度、二次元配列に代入した数値(文字列)を 二次元配列そのままで次のページに受け渡したいと考えています。 ※また、同時に新しく入力した値も受け取りたい。下記の name="data" の様に。 《1page.php》 → 《2page.php》 の受け渡しをする場合、 《1page.php》二次元配列作成 <?php for ($i=0; $i<10; $i++) { $test[] = array($_POST['moziretsu'],$_POST['suuretsu'],$_POST['suuretsu']); //文字・数字は毎回異なります。 } ?> <html> <body> <?= $test[2] ?><br> <?= $test[4] ?><br> <form action="2page.php" method="post"> <input type="text" name="data"><input type="submit" name="submit" value="次"> </form> </body> </html> 《2page.php》二次元配列受け取り <?php $aaaa = $_POST['data']; ?> で、新規に入力した数値は取得出来ても 二次元配列の $test はどの様に取得すれば宜しいのでしょうか? グーグル等で検索させてもらっても 希望の記事に辿り着かず困っております。 もしかしたら出来ないかも知れないので その場合は1page.phpで二次元配列をしないで 2page.phpにデータを送るり、2page.phpで二次元にする等の方法を考えなければなりませんし・・・。 書き方も悪くとても小さい初歩的な質問かとは思いますが 何卒、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP+MySQLでの配列のinsert文について

    PHP+MySQLでの配列のinsert文について はじめまして。 POSTされた配列データのDB一括挿入方法で約2週間悩み中で非常に困っております。 私の配列の理解が不足しているため、初心者の私でもわかるように解決方法をご教示いただけましたら大変助かります!何卒、よろしくお願い致します。 行いたい処理といたしまして、 [index.php] CSVアップロード(名前・メアド・金額・年月日の4項目)→※解決しました。  ↓↓↓ [check.php] CSVデータをテーブルで入力されている行数分をループして表示→※解決しました。  ↓↓↓ [finish.php] check.phpで表示した配列データをPOSTで受け取りDBに登録する。→※未解決 となります。 ソースは下記のようになります。 ※index.phpは今回無関係と思うので省略します。 ━━━━ [check.php]ここから ━━━━ ・ ・ ・ <form action="finish.php" method="post"> <? while($arr = fgetcsv_reg($fp,1024)){ ?> <? //空行以外を処理 $num = count($arr); if(!$arr ==''){ // $namae = $arr[0]; //名前 $mail = $arr[1]; //メアド $money = $arr[2]; //金額 $year = $arr[3]; //年 $month_hen = $arr[4]; //月 $month = sprintf("%02d", $month_hen); //1~9月(1桁)の場合、前に0を付加する $day_hen = $arr[5];//日 $day = sprintf("%02d", $day_hen); //1~9日(1桁)の場合、前に0を付加する // ?> <input type="hidden" name="namae[]" value="<?php echo $namae ?>"> <input type="hidden" name="mail[]" value="<?php echo $mail ?>"> <input type="hidden" name="money[]" value="<?php echo $money ?>"> <input type="hidden" name="year[]" value="<?php echo $year ?>"> <input type="hidden" name="month[]" value="<?php echo $month ?>"> <input type="hidden" name="day[]" value="<?php echo $day ?>"> ・ ・ ・ <input type="submit" value="  一括登録する  " /> </form> ━━━━ [check.php]ここまで ━━━━ ━━━━ [finish.php]ここから ━━━━ ・ ・ ・ // DB登録部分開始 if ($_POST['submit']) { $arr = array( 'reg_id', //auto_increment 'user_id', //ユーザーID(セッションで保持) 'namae', //名前 'mail', //メアド 'money',//金額 'ymd'//年月日 ); $value = array( NULL, mysql_real_escape_string( $_SESSION['user_id'] ), mysql_real_escape_string( $_POST['namae'] ), mysql_real_escape_string( $_POST['mail'] ), mysql_real_escape_string( $_POST['money'] ), mysql_real_escape_string( $_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day'] ) ); // DB登録部分終了 //ループ処理開始 foreach ( $arr as $value ) { $sql = "insert into receipt_issue ( $arr ) values ( $value )"; mysql_query($sql); $result = mysql_query( $sql ) ; //ループ処理終了 } } ・ ・ ・ ━━━━ [finish.php]ここまで ━━━━ というソースなのですが、データベースに登録できません。 例えば「finish.php」内に、 print_r( $_POST['namae'] ); と記述すると、 Array ( [0] => ああ君 [1] => いい君 [2] => うう君 [3] => ええ君 ) とちゃんと配列は受けとれているようです。 そもそもDB接続ができていないということもありません。 ※配列でない場合のテストでちゃんと接続・登録できていました。 いろいろ調べた中で、$value = array内の記述方法に問題があるのか・・・ と思い、色々調べて試したのですがダメでした。。。 上記の仕組みでループさせてデータベースに登録するには、どのように記述したらよろしいでしょうか? 情報に不足がございましたら、申し訳ございません。その点ご指摘いただきましたら必要な情報を再度投稿します。 何卒、お力をお貸しいただけましたら幸いでございます。 宜しくお願い致します!

    • 締切済み
    • PHP
  • php ログインでセッションが切れる

    PHPでログインする機能があります。 ログインして操作をしていると問題はないのですが、数分(測っていないのですが5分~10分)操作をせず放置しているとログインが切れてしまいます。 セッションの有効期限は24時間にしています。 確認してもセッションの有効期限はログインを行って24時間にちゃんとなっています。 if ($_SERVER['REQUEST_METHOD'] === 'POST') { try { // POSTで受け取ったパラメータを変数として展開 extract(filter_struct_utf8(INPUT_POST, array( 'email' => FILTER_STRUCT_FULL_TRIM, // トリミング 'pass' => '', 'token' => '', ))); // トークンをチェック Token::check($token); // IDをセッションに取得 $_SESSION['id'] = DB::connect()->userlogin($email, $pass); // セッションハイジャック対策 session_regenerate_id(true); // リダイレクト redirect(); } catch (Exception $e) { $errors = exception_to_array($e); } } 『userlogin』の部分 public function userlogin($email, $pass) { // 例外初期化 $e = null; // メールアドレスチェック if ($mail === '') { $e = e('メールアドレスが入力されていません。', $e); } // パスワードチェック if ($password === '') { $e = e('パスワードが入力されていません', $e); } // 1つでも例外が発生していればスローする if ($e) { throw $e; } // プリペアドステートメントを生成 $stmt = $this->pdo->prepare(implode(' ', array( 'SELECT `id`, `pass`', 'FROM `users`', 'WHERE `email` = ?', 'LIMIT 1', ))); // 値をバインドして実行 $stmt->execute(array($email)); // 見つかったかどうかチェック if (!$stmt->rowCount()) { throw e('そのメールアドレスは登録されていません。'); } // パスワード照合 $row = $stmt->fetch(); if ($row['pass'] !== password_hash($pass)) { throw e('パスワードが違います。'); } // IDを返す return (int)$row['id']; } ログイン処理に問題があるのでしょうか? それともサーバー側の設定(php.ini)なども何か設定を行ったほうがよいのでしょうか? 確認すべき点などございましたらアドバイスいただけませんでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • PHP