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

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

新規登録して質問してみよう
ただいま回答率
87.20%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

受付中

PHPでのBrackJack作成にて配列の管理が上手く行きません。

sshd911
sshd911

総合スコア1

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0回答

0評価

0クリップ

144閲覧

投稿2022/02/27 07:46

編集2022/02/28 05:00

セッション変数と通常の変数をkeyで対応付け連想配列で管理したいのですが、複雑な多次元配のようになり上手く行きません。
コードが冗長になり、分かりにくいかもしれませんが以下がこちらののコードになります。
print_rで値を出力した結果をの画面を下に記載しております。
初学者の為、適切な処理とは異なるかもしれませんが、その他のアドバイスも頂けたら幸いです。
宜しくお願いいたします。

php

<?php session_start(); if(empty($_GET)) { // 初回時のリセット resetGame(); print '初回リセットが完了しました。'; } $myCards['myCards'] = &$_SESSION['myCards']; // 自分の手札 $_SESSION['myCards'] = &$myCards['myCards']; $hostCards['hostCards'] = &$_SESSION['hostCards']; // 相手の手札 $_SESSION['hostCards'] = &$hostCards['hostCards']; $myTotal; // 自分の合計 $hostTotal; // 相手の合計 $cards['cards'] = &$_SESSION['cards']; // 山札 $_SESSION['cards'] = &$cards['cards']; $turn['turn'] = &$_SESSION['turn']; // 自分のターンが終わるとtrueになる $_SESSION['turn'] = &$turn['turn']; $result; function resetGame() { // 山札をリセット & シャッフル & 配る global $myCards, $hostCards, $myTotal, $hostTotal, $turn, $result, $cards; unset($result['result']); $turn['turn'] = false; for ($i=1; $i<=10; $i++) { // こちらが問題の箇所です。 $cards['cards'] = $i; } for ($i=1; $i<=10; $i++) { $cards['cards'] = $i; } for ($i=1; $i<=10; $i++) { $cards['cards'] = $i; } for ($i=1; $i<=10; $i++) { $cards['cards'] = $i; } // shuffle(array_column($cards, 'cards')); $myCards['myCards'] = array_pop($cards); // ここも問題かもしれません。 $myCards['myCards'] = array_pop($cards); $hostCards['hostCards'] = array_pop($cards); $hostCards['hostCards'] = array_pop($cards); $myTotal = array_sum(array_column($myCards,'myCards')); $hostTotal = array_sum(array_column($hostCards,'hostCards')); } function hit() { // カードを引く global $myCards, $myTotal, $cards, $turn; $turn['turn'] = false; if(count($myCards['myCards']) < 12){ $myCards['myCards'] = array_pop($cards); $myTotal = array_sum(array_column($myCards, 'myCards')); }else { return print 'これ以上ヒットはできません。'; } } function stand() { // スタンド後の処理 global $hostCards, $hostTotal, $cards, $turn, $myTotal, $result; $hostTotal = array_sum(array_column($hostCards, 'myCards')); if($hostTotal < 17) { // ホストは手札の合計が17以下の場合カードを引く $hostCards['hostCards'] = array_pop($cards); return stand(); }else { $turn['turn'] = true; if(is_bool($turn['turn'])){ if ($myTotal == $hostTotal) { if ($myTotal < 22 && $hostTotal < 22) { return $result = '同点の為、引き分けです。'; } else { return $result = 'あなたとホストがバーストした為、引き分けです。'; }} elseif ($myTotal > $hostTotal) { if ($myTotal > 21) { return $result = 'あなたがバーストした為、ホスト勝ちです。'; } else { return $result = 'あなたの勝ちです。'; }} elseif ($myTotal < $hostTotal) { if ($hostTotal > 21) { return $result = 'ホストがバーストした為、あなたの勝ちです。'; } else { return $result = 'ホストの勝ちです'; } } } } } ?> <?php if(! empty($_GET['reset'])) {$_SESSION['reset'] = $_GET['reset'];} if(! empty($_GET['hit'])) {$_SESSION['hit'] = $_GET['hit'] ;} if(! empty($_GET['stand'])) {$_SESSION['stand'] = $_GET['stand'];} if($_SESSION['reset'] && $_SESSION['turn'] === true) { unset($_SESSION['reset']); print 'リセットされました'; resetGame(); } if($_SESSION['hit'] && $_SESSION['turn'] === false) { unset($_SESSION['hit']); print 'ヒットされました'; hit(); } if($_SESSION['stand'] && $_SESSION['turn'] === false) { unset($_SESSION['stand']); print 'スタンドされました.'; stand(); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="brack-jack.css"> <title>BrackJack</title> </head> <body> <!-- 自分の手札を表示 --> <p>自分の手札:<?php // foreach($myCards as $mv) { // print $mv.', '; // } print_r($myCards['myCards']); ?></p> <!-- 自分の手札の合計を表示 --> <p>合計:<?= $myTotal; ?></p> <hr> <!-- ホストの手札を表示 --> <p>相手の手札:<?php // foreach($hostCards as $hv) { // print $hv.', '; // } print_r($hostCards); ?></p> <!-- ホストの手札の合計を表示 --> <p>合計:<?= $hostTotal; ?> <hr> <?= $result ?></p> <hr> <!-- $_GETの送信 --> <?php if ($_SESSION['turn'] === true) :?> <a href="?reset=reset">リセット</a> <?php endif; ?> <?php if ($_SESSION['turn'] === false) :?> <a href="?hit=hit">ヒット</a> <?php endif; ?> <?php if ($_SESSION['turn'] === false) :?> <a href="?stand=stand">スタンド</a> <?php endif;?> </body> </html> コード

引用テキスト

初回リセットが完了しました。
自分の手札:Array ( [0] => 7 [1] => 10 [2] => Array ( [0] => 8 [1] => 7 [2] => Array ( [0] => 5 [1] => 7 [2] => Array ( [0] => 5 [1] => 6 [2] => Array ( [0] => 3 [1] => 2 [2] => Array ( [0] => 4 [1] => 1 [2] => Array ( [0] => 3 [1] => 6 [2] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => ) [1] => 3 [2] => 8 ) [1] => 10 [2] => 9 ) ) [1] => 3 [2] => 5 [3] => 5 ) ) [1] => 4 [2] => 3 [3] => 4 ) ) [1] => 4 [2] => 9 [3] => 1 ) ) [1] => 3 [2] => 10 ) ) [1] => 6 [2] => Array ( [0] => Array ( [0] => 5 [1] => 1 [2] => 8 [3] => 6 [4] => Array ( [0] => Array ( [0] => 3 [1] => 1 [2] => 8 [3] => 7 [4] => 5 [5] => Array ( [0] => Array ( [0] => 1 [1] => 9 [2] => 6 [3] => 5 [4] => Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 8 [4] => 10 [5] => 7 [6] => 2 [7] => 7 [8] => 9 [9] => 10 [10] => 3 [11] => 3 [12] => 7 [13] => 6 [14] => 1 [15] => 8 [16] => 9 [17] => 5 [18] => 9 [19] => 7 [20] => 2 [21] => 8 [22] => 6 [23] => 10 [24] => 4 [25] => 2 [26] => 1 [27] => Array ( [0] => Array ( [0] => Array ( [0] => 8 [1] => 6 [2] => 2 [3] => 7 [4] => 2 [5] => 2 [6] => 5 [7] => 3 [8] => 7 [9] => 1 [10] => 4 [11] => 5 [12] => 9 [13] => 7 [14] => 9 [15] => 9 [16] => 1 [17] => 9 [18] => 6 [19] => 3 [20] => 10 [21] => 6 [22] => 10 [23] => Array ( [0] => 2 [1] => 3 [2] => 10 [3] => 3 [4] => 3 [5] => 6 [6] => 7 [7] => 5 [8] => 5 [9] => 6 [10] => 6 [11] => 4 [12] => 7 [13] => 8 [14] => 10 [15] => 5 [16] => 1 [17] => 4 [18] => 6 [19] => 9 [20] => 5 [21] => 7 [22] => 8 [23] => 1 [24] => 9 [25] => 7 [26] => 10 [27] => 1 [28] => 8 [29] => 9 [30] => 8 [31] => 2 [32] => 9 [33] => 4 [34] => Array ( [0] => 5 [1] => 9 [2] => 8 [3] => 1 [4] => 3 [5] => 3 [6] => 1 [7] => 5 [8] => 10 [9] => 7 [10] => 8 [11] => 4 [12] => 8 [13] => 6 [14] => 9 [15] => 6 [16] => 1 [17] => 4 [18] => 4 [19] => 1 [20] => Array ( [0] => 9 [1] => 5 [2] => 8 [3] => 2 [4] => 8 [5] => 10 [6] => 5 [7] => 6 [8] => 6 [9] => 3 [10] => 7 [11] => 4 [12] => 7 [13] => 2 [14] => 3 [15] => 1 [16] => 8 [17] => 6 [18] => 2 [19] => 9 [20] => 6 [21] => 4 [22] => 10 [23] => 9 [24] => 9 [25] => 1 [26] => 4 [27] => 10 [28] => 8 [29] => 3 [30] => Array ( [0] => 7 [1] => 1 [2] => 7 [3] => 3 [4] => 2 [5] => 9 [6] => 8 [7] => 5 [8] => 5 [9] => 2 [10] => 1 [11] => 3 [12] => 6 [13] => 4 [14] => 8 [15] => 8 [16] => 10 [17] => 6 [18] => 4 [19] => 1 [20] => 8 [21] => 9 [22] => 4 [23] => 4 [24] => 5 [25] => 2 [26] => 6 [27] => 5 [28] => 3 [29] => 1 [30] => 7 [31] => 9 [32] => 10 [33] => 6 [34] => 2 [35] => 10 [36] => 7 ) [31] => 4 [32] => 10 [33] => 5 [34] => 7 [35] => 5 [36] => 1 ) [21] => 6 [22] => 9 [23] => 7 [24] => 2 [25] => 10 [26] => 5 [27] => 3 [28] => 4 [29] => 10 [30] => 5 [31] => 2 [32] => 7 [33] => 6 [34] => 9 [35] => 3 [36] => 2 ) [35] => 4 [36] => 10 ) [24] => 10 [25] => 1 [26] => 8 [27] => 5 [28] => 10 [29] => 7 [30] => 3 [31] => 5 [32] => 4 [33] => 8 ) [1] => 5 [2] => 8 [3] => 10 [4] => 6 [5] => 1 [6] => 2 [7] => 5 [8] => 9 [9] => 4 [10] => 8 [11] => 9 [12] => 7 [13] => 6 [14] => 4 [15] => 3 [16] => 1 [17] => 8 [18] => 5 [19] => 1 [20] => 10 [21] => 7 [22] => 6 [23] => 4 [24] => 10 [25] => 9 [26] => 8 [27] => 3 [28] => 1 [29] => 3 [30] => 2 [31] => 7 [32] => 7 [33] => 2 [34] => 3 [35] => 6 [36] => 4 ) ) [28] => 4 [29] => 4 [30] => 10 [31] => 5 [32] => 6 [33] => 9 [34] => 8 [35] => 4 ) ) [5] => 8 [6] => 9 [7] => 9 [8] => 10 [9] => 9 [10] => 3 [11] => 5 [12] => 2 [13] => 7 [14] => 4 [15] => 6 [16] => 1 [17] => 10 [18] => 1 [19] => 3 [20] => 3 [21] => 7 [22] => 4 [23] => 8 [24] => 7 [25] => 1 [26] => 6 [27] => 7 [28] => 8 [29] => 10 [30] => 2 [31] => 2 [32] => 5 [33] => 8 [34] => 2 [35] => 10 ) ) [6] => 6 [7] => 6 [8] => 4 [9] => 3 [10] => 2 [11] => 7 [12] => 5 [13] => 2 [14] => 3 [15] => 8 [16] => 5 [17] => 9 [18] => 8 [19] => 2 [20] => 4 [21] => 10 [22] => 6 [23] => 1 [24] => 9 [25] => 7 [26] => 6 [27] => 10 [28] => 10 [29] => 8 [30] => 1 [31] => 7 [32] => 10 [33] => 4 [34] => 2 [35] => 5 ) ) [5] => 4 [6] => 2 [7] => 2 [8] => 7 [9] => 10 [10] => 5 [11] => 5 [12] => 8 [13] => 2 [14] => 1 [15] => 6 [16] => 7 [17] => 5 [18] => 8 [19] => 2 [20] => 3 [21] => 6 [22] => 9 [23] => 9 [24] => 4 [25] => 1 [26] => 6 [27] => 1 [28] => 3 [29] => 9 [30] => 9 [31] => 7 [32] => 8 [33] => 10 [34] => 3 ) ) ) ) [1] => 2 [2] => 2 ) ) [1] => 7 [2] => 5 ) ) ) ) ) ) ) [1] => 1 [2] => 2 ) [1] => 7 [2] => 3 ) [1] => 2 [2] => 5 ) [1] => 5 [2] => 2 ) [1] => 4 [2] => 5 ) [1] => 7 [2] => 2 ) [1] => 2 [2] => 3 ) ) ) ) ) ) ) )

合計:0

以下似たような結果が出力されます。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

m.ts10806

2022/02/27 08:39

配列のことを理解していれば何次元であろうと関係ないのですが、 これをもってどうしたいのか次第ではないでしょうか。 現状だと何が問題なのか、どうしたいのか、何を解決したいのか が見えないのでどう答えてよいのか分かりません。
sshd911

2022/02/27 13:41 編集

ご指摘ありがとうございます。 求めてる結果は配列を一次元配列若しくは、二次元配列の直感的に管理しやすい配列です。 現状上記の複雑な配列が生成されてしまった為、コードの途中にもあるようにfor文を四回繰り返す処理が問題点なのではないかと考えております。 連想配列を普段使用してこなっかった為、インデックス配列とは異なる挙動に立ち往生してしまいました。 ユーザからの操作に対して、リダイレクトする際に、できるだけ値を保持させたいので、セッション変数との対応付けを行いたい次第です。
m.ts10806

2022/02/27 20:00

モックとしてその目指す配列を作ってみてそこから逆にその形を目指すようにしたら良いと思います。 「もしくは」のように不確定な状態でただ何かするよりゴールを確定してからですね。 いずれにしても先に書いたように配列のことを理解していれば何次元でも関係ないですし、1次元でも「複雑」となり得ます。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。