なんだが、勉強のメモをブログに整理するのが面倒になってきたな。
まぁとりあえず、惰性で続けてみるかぁ〜( ´Д`)=3
PHP入門編6:多次元配列を理解しよう (全12回)
01:多次元配列の概要
- 2次元配列とは
- 2次元配列とは、2つのインデックスで要素を指定する配列のこと。
$arr[3][4] = 100;
- 2次元配列とは、2つのインデックスで要素を指定する配列のこと。
02:2次元配列を作成する
- 配列の作成方法
$teamA = ["勇者", "戦士", "魔法使い"]; $teamB = array("遊び人", "格闘家", "僧侶"); |
- 2次元配列を作成する
$teamC = ["勇者", "戦士", "魔法使い"]; $teamD = ["盗賊", "忍者", "商人"]; $teamE = ["スライム", "ドラゴン", "魔王"]; $teams = [$teamC, $teamD, $teamE]; echo($teams[0][0] . ", "); echo($teams[0][1] . ", "); echo($teams[0][2] . "\n"); |
03:2次元配列を操作する1
- 2次元配列を直接定義する
<?php // 2次元配列の基本操作 $teams = [ ["勇者", "戦士", "魔法使い"], ["盗賊", "忍者", "商人"], ["スライム", "ドラゴン", "魔王"], ]; ?> |
04:2次元配列を操作する2
- 要素を追加する
<?php $teams = [ ["勇者", "戦士"], ["盗賊", "忍者", "商人"], ["スライム", "ドラゴン", "魔王"], ["魔法使い"], ]; print_r($teams); $teams[] = ["メタルモンスター", "シルバーモンスター", "ブラックモンスター"]; print_r($teams); $teams[0][] = "レッドドラゴン"; print_r($teams); ?> |
- 要素を削除する
unset($teams[1]); print_r($teams); unset($teams[0][1]); print_r($teams); |
05:2次元配列をループで処理する
- forで配列のインデックスを出力する
<?php $teams = [ ["勇者 ドット絵のデータ 7", "戦士", "魔法使い"], ["盗賊", "忍者", "商人"], ["スライム", "ドラゴン", "魔王"], ]; for ($i = 0; $i < count($teams); $i++) { for($j = 0; $j < count($teams[$i]); $j++) { echo $i; echo $j; echo " "; } echo "\n"; echo "---\n"; } ?> |
- forで配列を出力する
for ($i = 0; $i < count($teams); $i++) { for($j = 0; $j < count($teams[$i]); $j++) { echo $teams[$i][$j] . " "; } echo "\n"; echo "---\n"; } |
- foreachで配列を表示
foreach ($teams as $team) { foreach ($team as $player) { echo $player . " "; } echo "\n"; echo "---\n"; } |
06:2次元配列をarrayで作成する
- 2次元配列をarrayで作成する
<?php $teams = array( array("勇者", "戦士", "魔法使い"), array("盗賊", "忍者", "商人"), array("スライム", "ドラゴン", "魔王"), ); foreach ($teams as $column) { foreach ($column as $row) { echo $row." "; } echo "\n"; } echo "------\n"; ?> |
07:ドット絵を表示する
- ドット絵を表示する
<?php // ドット絵を表示する $enemyImage = array( array(0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0), array(1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1), array(1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1), array(1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1), array(0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0), array(0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0), array(0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1) ); foreach ($enemyImage as $line) { foreach($line as $dot){ if($dot==1){ echo "#"; } else { echo " "; } } echo "\n"; } ?> |
08:3次元配列で複数のドット絵を表示する
- 3次元配列の出力
foreach ($enemyImages as $enemyImage) { foreach ($enemyImage as $line) { foreach ($line as $dot) { if ($dot == 1) { echo "#"; } else { echo " "; } } echo "\n"; } echo "\n"; } |
09:2次元配列で地図を表示する1
- array_fill()関数:パラメータvalueを値とするnum個のエントリからなる配列を埋める。この際、キーは、start_indexパラメータから開始する。
array array_fill(int $start_index, int $num, mixed $value) |
- array_fillで配列を作る
<?php // 2次元配列で地図を表示する1 $mapRow = array_fill(0, 20, "森"); ?> |
- array_fillで2次元配列を作る
<?php // 2次元配列で地図を表示する1 $mapRow = array_fill(0, 20, "森"); $landMap = array_fill(0, 10, $mapRow); ?> |
10:2次元配列で地図を表示する2
- 2で割り切れる行を道にする
- 3で割り切れる列を道にする
- 値が"森"の場合に道にする
foreach ($landMap as $i => $row) { echo $i.":"; foreach ($row as $j => $column) { if (($i % 2 == 0 || $j % 3 == 0) && $column == "森") { $landMap[$i][$j] = "+"; } echo $landMap[$i][$j]; } echo "\n"; } |
11:標準入力から2次元配列
- ドット絵のデータ
7 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 |
- ドット絵データを読み込む
<?php // 標準入力から2次元配列 $numbers = trim(fgets(STDIN)); for ($i = 0; $i < $numbers[0]; $i++) { $table[] = explode(" ", trim(fgets(STDIN))); } foreach ($table as $line) { foreach ($line as $dot) { echo $dot; } echo "\n"; } ?> |
12:2次元配列で画像を配置
- 画像のパスの配列
$playerImages = array( "Empty.png", "Dragon.png", "Crystal.png", "Hero.png", "Heroine.png",); |
- キャラクター配置の2次元配列
//画像配置用の配列 $playerPositions = array( array(1, 1, 1, 1), array(0, 0, 0, 0), array(1, 2, 3, 4), ); |
感想
画像をインターネットから取ってきてHTMLで表示する部分は面白かったな。