$_SESSIONは配列を入れられると思うのですが、
例えば、
$code=$_GET['code'];
if(isset($_SESSION['cart']))
{
$cart=$_SESSION['cart'];
}
$_SESSION['cart']=$code;
これではエラーになってしまいます。
$code=$_GET['code'];
if(isset($_SESSION['cart']))
{
$cart=$_SESSION['cart']; ←上書きせず追加していく
}
$cart[]=$code;
$_SESSION['cart']=$cart;
上記の様に$cart[]=$code;を記述すると上手くいくのですが、直接$_SESSIONに入れては出来ないのでしょうか?
又、上書きせず追加していくには$cart=$_SESSION['cart'];の記述が必要だと思うのですが、これはセッションの値を$cartに移すと上書きされず、値を持っていられると意味なのですが、何故、上書きされないのか上手く理解が出来ません。
教えてください。宜しくお願いします。
No.3
- 回答日時:
>これはセッションの値を$cartに移すと上書きされず、値を持っていられると意味なのですが、何故、上書きされないのか上手く理解が出来ません。
「=」は、変数の値を全てコピーして代入する演算子だからです。
「=&」(リファレンスの代入)を使用すれば元の変数も書き換わります。
$cart =& $_SESSION['cart'];
$cart[]=$code;
unset($cart);
・リファレンスの代入
https://www.php.net/manual/ja/language.reference …
ディープコピー(Deep copy)= 深いコピー、シャローコピー(Shallow copy)= 浅いコピー、と言う専門用語があります。
意図した通りに動作しないときは、変数の値を出力して確認するとよいです。
print_r($_SESSION);
var_dump($_SESSION);
No.2
- 回答日時:
下記で動作するはずです。
$code = $_GET['code'];
if(!isset($_SESSION['cart']))
{
$_SESSION['cart'] = array(); // 存在しない場合の初期化
}
$_SESSION['cart'][] = $code;
>上記の様に$cart[]=$code;を記述すると上手くいくのですが、直接$_SESSIONに入れては出来ないのでしょうか?
できます。
>又、上書きせず追加していくには$cart=$_SESSION['cart'];の記述が必要だと思うのですが、
不要です。
No.1
- 回答日時:
PHP Version 7.4.33で下記コードを試したら、とくに問題なく動きました。
$_SESSION['cart'] = $_GET['code'];
>$_SESSION['cart']=$code;
>これではエラーになってしまいます。
具体的にどんなエラーメッセージを出てるのか補足したら回答を得られやすいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- X(旧Twitter) Twitter 1 2023/05/10 16:33
- X(旧Twitter) Twitter RTについて 1 2023/07/20 21:36
- アイドル・グラビアアイドル 日系CA(キャビンアテンダント)になったらK-POPアイドルと繋がれるか? 1 2022/09/16 17:57
- 数学 0 a b a b 0 A= b 0 c B= b 0 c c a 0 0 c a を使って | a 2 2023/06/08 08:48
- X(旧Twitter) ツイートとリツイートの時間の差って 1 2023/08/14 11:00
- FTTH・光回線 光回線、中継器を導入した際の端末側のローカルipアドレスについて 3 2023/03/11 14:10
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- 工学 制御工学の問題について 1 2022/11/01 09:12
- X(旧Twitter) Twitter 1 2023/05/12 12:06
- 工学 制御工学の問題について 1 2022/11/01 23:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
file_existsでファイル名の部分...
-
foreachのなかで次のキーを参照...
-
PHPで多次元配列を一度に処理す...
-
チェックボックス複数選択 mys...
-
mb_ereg_replaceについて
-
前のページで入力したものをあ...
-
プルダウンメニューでCSVデータ...
-
重複しないランダム関数を教え...
-
PHPで配列をPOSTデータで送った...
-
PHPのループ数限界値について
-
Smarty の演算方法
-
配列の書き方
-
PHPのカッコ[ ]の使い方について
-
プログラミングのPythonのnoteb...
-
スカラーのベクトル微分
-
PHPでこのコード自体に意味は無...
-
ヒアドキュメントの中のfor文
-
連想配列のキー値(連番)を基...
-
Excel VBAでフィルター後の対象...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
file_existsでファイル名の部分...
-
$_SESSIONに二次元配列を使える...
-
foreachのなかで次のキーを参照...
-
String だと「 ByRef引数の型が...
-
配列を回すとき、最後の要素だ...
-
配列一致(要素順番は違うが内容...
-
PHPのカッコ[ ]の使い方について
-
ネストが深い時のforeachはどう...
-
チェックボックス複数選択 mys...
-
PHPで配列をPOSTデータで送った...
-
phpで、連想配列を普通の配列に...
-
PHP 多次元配列変数のデータ受...
-
postgresql関数をつかったレコ...
-
【PHP】配列内のある値以上をカ...
-
SQL文の実行結果を変数で受けて...
-
プルダウンメニューでCSVデータ...
-
Smartyのテンプレートからjavas...
-
PHPにてクラスを配列にすること...
-
CSVデータのn番目だけの値を取...
おすすめ情報
すみません、先程動かしたらエラーが出ませんでした。昨日、動かした時は出たのですが。謎です。
もう一つ教えて頂きたいのですが、
$cart[]=$code;で値を配列に入れる。
$_SESSION['cart']=$cart;で$cartの配列をセッションに入れる。
$cart=$_SESSION['cart'];で上書きされず値が追加されていく。
と思うのですが、$cart=$_SESSION['cart'];で再代入すると上書きされないという事でしょうか?何故、上書きされないのか理解が出来ずにいます。
もし宜しければ教えて頂けると助かります。m(__)m
御解答ありがとうございます。
先程、教えて頂いた記述を実行しましたがカートの中身は追加させず値が一つしか入っていない様です。
array(1) { ["cart"]=> array(1) { [0]=> string(1) "1" } }←追加されず上書きになってしまいます。
<?php
$code = $_POST['code'];
if(!isset($_SESSION['cart']))
{
$_SESSION['cart'] = array();
}
$_SESSION['cart'][] = $code;
var_dump($_SESSION); ←表示の仕方が間違っているのでしょうか?
?>