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

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

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

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

多次元配列

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

PHP

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

セッション

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

配列

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

Q&A

0回答

311閲覧

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

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クリップ

投稿2022/02/27 07:46

編集2022/02/27 07:52

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

php

1<?php 2session_start(); 3 4if(empty($_GET)) { // 初回時のリセット 5 resetGame(); 6 print '初回リセットが完了しました。'; 7} 8 9$myCards['myCards'] = &$_SESSION['myCards']; // 自分の手札 10$_SESSION['myCards'] = &$myCards['myCards']; 11$hostCards['hostCards'] = &$_SESSION['hostCards']; // 相手の手札 12$_SESSION['hostCards'] = &$hostCards['hostCards']; 13$myTotal; // 自分の合計 14$hostTotal; // 相手の合計 15$cards['cards'] = &$_SESSION['cards']; // 山札 16$_SESSION['cards'] = &$cards['cards']; 17$turn['turn'] = &$_SESSION['turn']; // 自分のターンが終わるとtrueになる 18$_SESSION['turn'] = &$turn['turn']; 19$result; 20 21function resetGame() { // 山札をリセット & シャッフル & 配る 22 global $myCards, $hostCards, $myTotal, $hostTotal, $turn, $result, $cards; 23 unset($result['result']); 24 $turn['turn'] = false; 25 for ($i=1; $i<=10; $i++) { // こちらが問題の箇所です。 26 $cards['cards'] = $i; 27 } 28 for ($i=1; $i<=10; $i++) { 29 $cards['cards'] = $i; 30 } 31 for ($i=1; $i<=10; $i++) { 32 $cards['cards'] = $i; 33 } 34 for ($i=1; $i<=10; $i++) { 35 $cards['cards'] = $i; 36 } 37 38 // shuffle(array_column($cards, 'cards')); 39 $myCards['myCards'] = array_pop($cards); // ここも問題かもしれません。 40 $myCards['myCards'] = array_pop($cards); 41 $hostCards['hostCards'] = array_pop($cards); 42 $hostCards['hostCards'] = array_pop($cards); 43 $myTotal = array_sum(array_column($myCards,'myCards')); 44 $hostTotal = array_sum(array_column($hostCards,'hostCards')); 45} 46 47function hit() { // カードを引く 48 global $myCards, $myTotal, $cards, $turn; 49 $turn['turn'] = false; 50 if(count($myCards['myCards']) < 12){ 51 $myCards['myCards'] = array_pop($cards); 52 $myTotal = array_sum(array_column($myCards, 'myCards')); 53 }else { 54 return print 'これ以上ヒットはできません。'; 55 } 56} 57 58function stand() { // スタンド後の処理 59 global $hostCards, $hostTotal, $cards, $turn, $myTotal, $result; 60 $hostTotal = array_sum(array_column($hostCards, 'myCards')); 61 if($hostTotal < 17) { // ホストは手札の合計が17以下の場合カードを引く 62 $hostCards['hostCards'] = array_pop($cards); 63 return stand(); 64 }else { 65 $turn['turn'] = true; 66 67 if(is_bool($turn['turn'])){ 68 if ($myTotal == $hostTotal) { 69 if ($myTotal < 22 && $hostTotal < 22) { 70 return $result = '同点の為、引き分けです。'; 71 } else { 72 return $result = 'あなたとホストがバーストした為、引き分けです。'; 73 }} elseif ($myTotal > $hostTotal) { 74 if ($myTotal > 21) { 75 return $result = 'あなたがバーストした為、ホスト勝ちです。'; 76 } else { 77 return $result = 'あなたの勝ちです。'; 78 }} elseif ($myTotal < $hostTotal) { 79 if ($hostTotal > 21) { 80 return $result = 'ホストがバーストした為、あなたの勝ちです。'; 81 } else { 82 return $result = 'ホストの勝ちです'; 83 } 84 } 85 } 86} 87} 88?> 89<?php 90 91if(! empty($_GET['reset'])) {$_SESSION['reset'] = $_GET['reset'];} 92if(! empty($_GET['hit'])) {$_SESSION['hit'] = $_GET['hit'] ;} 93if(! empty($_GET['stand'])) {$_SESSION['stand'] = $_GET['stand'];} 94 95 if($_SESSION['reset'] && $_SESSION['turn'] === true) { 96 unset($_SESSION['reset']); 97 print 'リセットされました'; 98 resetGame(); 99 } 100 if($_SESSION['hit'] && $_SESSION['turn'] === false) { 101 unset($_SESSION['hit']); 102 print 'ヒットされました'; 103 hit(); 104 } 105 if($_SESSION['stand'] && $_SESSION['turn'] === false) { 106 unset($_SESSION['stand']); 107 print 'スタンドされました.'; 108 stand(); 109 } 110?> 111 112<!DOCTYPE html> 113<html lang="ja"> 114<head> 115 <meta charset="UTF-8"> 116 <link rel="stylesheet" href="brack-jack.css"> 117 <title>BrackJack</title> 118</head> 119<body> 120<!-- 自分の手札を表示 --> 121 <p>自分の手札:<?php 122 // foreach($myCards as $mv) { 123 // print $mv.', '; 124 // } 125 print_r($myCards['myCards']); 126 ?></p> 127<!-- 自分の手札の合計を表示 --> 128 <p>合計:<?= $myTotal; ?></p> 129 <hr> 130<!-- ホストの手札を表示 --> 131 <p>相手の手札:<?php 132 // foreach($hostCards as $hv) { 133 // print $hv.', '; 134 // } 135 print_r($hostCards); 136 ?></p> 137<!-- ホストの手札の合計を表示 --> 138 <p>合計:<?= $hostTotal; ?> 139 <hr> 140 <?= $result ?></p> 141 <hr> 142<!-- $_GETの送信 --> 143 <?php if ($_SESSION['turn'] === true) :?> 144 <a href="?reset=reset">リセット</a> 145 <?php endif; ?> 146 <?php if ($_SESSION['turn'] === false) :?> 147 <a href="?hit=hit">ヒット</a> 148 <?php endif; ?> 149 <?php if ($_SESSION['turn'] === false) :?> 150 <a href="?stand=stand">スタンド</a> 151 <?php endif;?> 152</body> 153</html> 154コード

引用テキスト

初回リセットが完了しました。
自分の手札: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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/02/27 08:39

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

2022/02/27 13:41 編集

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

2022/02/27 20:00

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問