1.阵列:一、二、三维
$a[0] = 123; // 一维$a[1][0] = 10; // 二维$a[1][2][3] = 'Brad'; // 三维$a[2] = array(1, 2, 3, 4, 5);var_dump($a);// array(3) { // [0]=> int(123) // [1]=> array(2) // { // [0]=> int(10) // [2]=> array(1) { //$a[1][2][3] = 'Brad';// [3]=> string(4) "Brad" // } // // [2]=> array(5) {// [0]=> int(1) // [1]=> int(2) // [2]=> int(3) // [3]=> int(4) // [4]=> int(5) // }
2.Q:为什么在同一层没有同时被输出?
A:是因为程式是一行一行跑,阵列的特性是门越后面越晚开,他是在$vv被输出
//key[0][1][2] : value 123、array(2)、array(5) foreach ($a as $k => $v) { // $v看第一格[]array进下一层 if (gettype($v) == 'array') { //key[0][2] : int(10)、array(1) foreach ($v as $kk => $vv) { // $vv看第二格[]array进下一层 if (gettype($vv) == 'array') { // [3]=> string(4) // $vvv看第三格[]array echo $vvv foreach ($vv as $kkk => $vvv) { echo $vvv; // $vvv看第三格[] "Brad" } } else { echo $vv; //$vv看第二格[] int(10) } echo '<br />'; } } else { echo $v; //$v看第一格[] value 123 } echo '<br />';
程式会先执行a[0]里面的所有
才会执行a[1]里面的所
最后在执行a[2]里的所
所以就算同一阶层
程式要执行完a[1]里面的所有东西
才会往a[2]迈进
执行顺序一律看第一个门
3.阵列画画~~
$a[0] = 11; $a[1] = array(111,222,333); $a[2] = 33; foreach($a as $k => $v){ echo $k . ':'; if (gettype($v) == 'array'){ foreach($v as $kk => $vv){ echo $vv . ' '; } echo '<br />'; }else{ echo $v . '<br />'; } }
4.扑克牌抽抽v1~v3 (PHP04影片00:50)
do...while....至少做一次,再判断
实例:至少做一次抽牌再判断有没有重複
$poker = array(); for ($i = 0; $i < 52; $i++){ do { $temp = rand(0,51); // 检查机制 $isRepeat = false; for ($j=0; $j<$i; $j++){ if ($poker[$j] == $temp){ // 哇, 重複了 $isRepeat = true; break; } } }while($isRepeat); $poker[] = $temp; echo $temp . '<br />'; } echo '---';
5.booling值变数的命名,要符合中文意义
while($isRepeat); //$isRepeat这个有重複 有,进入印出 $poker[] = $temp; echo $temp . '<br />'; }
6.PHP官方 使用API- Array
shuffle(洗牌)一堆不重複的资料打乱Range (扑克牌)https://www.php.net/manual/en/function.array
https://www.php.net/manual/en/function.range.php
$poker = range(0, 51); //照顺序的扑克牌1~52 shuffle($poker); //打乱 //只印出值(没有=>) foreach ($poker as $v) { echo $v . '</tr>'; } echo "----<br>"
7.foreach($aaa as $bbb => $ccc)
有=>(的)才会有key与value,否则只有value
ex:
foreach ($players as $player) { //只取value sort($player); echo '<tr>'; foreach ($player as $card) { echo "<td>"; echo $suits[(int)($card / 13)]; echo $values[$card % 13]; echo "</td>"; } echo '</tr>'; }
8.思考方式:玩家怎么拿牌?
(1)玩家怎么拿牌?
$players = [[], [], [], []]; //二维 发牌 foreach ($poker as $i => $card) { $players[1?][2?] = $card; }
(2)观察key,跟除数有关
$players = [[], [], [], []]; //二维 发牌 foreach ($poker as $i => $card) { $players[$i % 4][(int)($i / 4)] = $card; }
9.思考方式:画表格
4*13的表格
1.先画大概
<tr> <td>123132</td> <td>123132</td> <td>123132</td> <td>123132</td> </tr>
2.製作第一笔内容
<tr> <?php foreach ($players[0] as $card) { echo "<td>{$card}</td>"; } ?> <tr>
3.把tr塞进去(因为每一圈都有)
<?php echo '<tr>'; foreach ($players[0] as $card) { echo "<td>{$card}</td>"; } echo '<tr>'; ?>
4.继续设定每一圈要做的事情
<?php //每个玩家($players)内的每一玩家($player)(players's key)内都要做一次 foreach ($players as $player) { echo '<tr>'; //$players[0]改成$player:读取每个玩家手上的牌 foreach ($player as $card) { echo "<td>{$card}</td>"; } echo '<tr>'; } ?>
5.放上牌样♠♥♦♣及牌面
♠<br> ♥<br> ♦<br> ♣<br> $suits = [ "♠", "<font color='red'>♥</font>", "<font color='red'>♦</font>", "♣" ]; $values = ['A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K'];
6.计算出规则(♠♥♦♣%13各0.1.2.3.4....拿到key)
foreach ($players as $player) { echo '<tr>'; //player:读取每个玩家手上的牌 //计算出规则(♠♥♦♣%13各0.1.2.3.4....拿到key) foreach ($player as $card) { echo "<td>"; //除以13取整数(花色) echo $suits[(int)($card / 13)]; //除以13取余数(牌面) echo $values[$card % 13]; echo "</td>"; } echo '</tr>'; }
7.排序sort
PHP官方
https://www.php.net/manual/en/function.sort
foreach ($players as $player) { sort($player); echo '<tr>'; //player:读取每个玩家手上的牌 //计算出规则(♠♥♦♣%13各0.1.2.3.4....拿到key) foreach ($player as $card) { echo "<td>"; //除以13取整数(花色) echo $suits[(int)($card / 13)]; //除以13取余数(牌面) echo $values[$card % 13]; echo "</td>"; } echo '</tr>'; } ?>