详谈PHP数组

开发 后端
PHP数组是最常见的批量数据存储机构,文章利用PHP数组模拟了一个简单的案例,希望对大家有帮助。

随着时代的发展,我们的编程技术也越来越多,对于PHP想必大家都很了解吧,我们这里就介绍一下PHP数组吧。PHP数组是最常见的批量数据存储结构,由于数组采用顺序存储,所以可以方便的进行随机存储。在很多语言中,数组都是静态的,必须在使用前指定数组的长度,而在PHP中,你完全不用操心这个问题,数组是完全动态的。你甚至可以这样来使用一个数组。

PHP CODE  
// DEMO of Array  
demo_array[] = 1;  
demo_array[] = 2; 
  • 1.
  • 2.
  • 3.
  • 4.

#T#下面我们用PHP数组来模拟一下中国广大的劳动人民很喜欢的一种体育运动——麻将的洗牌。这里先普及一下麻将的规则,以后伺候MM的母亲时有用的:)。首先,麻将是要4个人玩的,3P是不行的。总共108张牌,摸完牌后庄家14张,另外3人每人13张,还剩55张。(麻将全国有N种玩法,这里讲的是Easy家乡的玩法,没有中发白等花牌,是Easy见过的玩法中最简单的了。)然后我们来分析一下如何用随机数来模拟这个过程,这样的练习不妨多做,因为从具体事例中提取出数学模型是编程的基本功。首先,我们用一个长度为108的数组来存放这108张牌,初始化的时候不妨假设它们是顺序排放的。

然后,我们来模拟洗牌的过程,这实际上是若干次的两张牌交换的过程。我们产生两个在1~108之间的随机数,然后交换以这两个数为index的数组元素的值就可以了。因为要多次交换,我们可以把这个过程定义为一个函数。接着,就是把这108张牌分给4个人,实际上,只要前边的交换次数足够大,直接切成5份就OK了。不过为了更好的模拟现实和表现数组的特性,我们采用循环的方式来分发。就是每个人一次四张,然后一个人一张,庄家两张。好了,整个过程就是这样的了。下边我们通过程序来说明一些更为细节的东西。

PHP CODE  
<?php 
/** ************************************************************  
* 一个使用数组来模拟麻将洗牌和发牌过程的例子  
* @ Easy@bjpeu.edu.cn  
* @ 2003-6-3  
** *************************************************************/  
 
// 换牌函数  
function swap()  
{  
// 将$majiangArray定义为全局变量  
// 这样可以在函数中进行操作  
global $majiangArray;  
 
// 产生两个1到108的随机数  
$index1 = rand( 1 , 108 );  
$index2 = rand( 1 , 108 );  
 
// 交换相应的数组元素的值  
$tmp = $majiangArray[ $index1 ];  
$majiangArray[ $index1 ] = $majiangArray[ $index2 ];  
$majiangArray[ $index2 ] = $tmp;  
}  
 
// 将数组的内容用相应的图片表示出来的函数  
function showArray( $arrayName )  
{  
$countcount = count ( $arrayName );  
for ( $i = 0 ; $i < $count ; $i++ )  
{  
echo '<img src="img/'. $arrayName[ $i ] .'"> ';//显示相应的图片  
}  
echo '<p>';//换行  
}  
 
// 主程序部分开始  
 
// 初始化数组  
unset( $majiangArray );  
$majiangArray[] = '0'; // 数据从1开始存放,跳过0  
for ( $i = 1 ; $i <= 3 ; $i++ )// 共有三种花色  
{  
for ( $j = 1 ; $j <= 9 ; $j++ )// 一个花色中有九种牌  
{  
for ( $k = 1 ; $k <= 4 ; $k++ )// 每种牌有四张  
{  
$majiangArray[] = $i . '_' . $j . '.gif';  
}  
}  
}  
 
// 开始洗牌  
for ( $i = 1 ; $i <= 1000 ; $i ++ )// 循环变量i被重新赋值重用  
{  
swap();  
}  
 
// 初始化四个用户  
unset( $user1 );  
unset( $user2 );  
unset( $user3 );  
unset( $user4 );  
 
// $seek是进度指针,纪录当前应该从那里发牌  
$seek = 1;  
 
for ( $i = 1 ; $i <= 3 ; $i++ )// 总共摸三次四张的  
{  
for ( $j = 1 ; $j <= 4 ; $j++ )// 四个人  
{  
for ( $k = 1 ; $k <= 4 ; $k++ )// 一次四张  
{  
$name = 'user'.$j;  
${$name}[] = $majiangArray[ $seek++ ];  
}  
}  
}  
 
// 然后一人一张  
for ( $i = 1 ; $i <= 4 ; $i++ )  
{  
$name = 'user'.$i;  
${$name}[] = $majiangArray[ $seek++ ];  
}  
 
// ***庄家多摸一张  
$user4[] = $majiangArray[ $seek ];  
 
// 分牌结束 显示结果  
showArray( $user1 );  
showArray( $user2 );  
showArray( $user3 );  
showArray( $user4 );  
 
?> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
责任编辑:田树 来源: 博客
相关推荐

2009-11-18 14:11:10

PHP数组变量

2009-11-16 17:07:58

PHP二维数组

2009-11-18 11:10:16

PHP WEB服务器

2009-12-01 16:12:37

PHP HTML截取代

2010-04-06 09:44:40

CentOS系统

2011-06-08 15:31:43

JAVA多维数组

2015-04-22 15:14:38

JavaScriptJavaScript数

2011-07-12 17:06:43

PHP

2011-05-17 14:29:29

Dijkstra

2009-12-04 14:41:11

PHP数组变成JSON

2009-11-16 15:56:46

PHP数组查询

2009-11-16 17:35:38

PHP数组排序

2013-01-04 13:22:42

OpenFlowSDN

2012-02-06 13:52:32

HibernateJava

2010-01-05 17:59:46

PHP JSON数组对

2009-11-16 16:17:45

PHP数组排序

2009-11-17 15:07:16

PHP数组遍历

2009-11-25 09:56:06

PHP数组处理函数

2022-10-26 10:15:53

GoFramePHP数组

2009-11-19 11:12:13

Oracle LogM
点赞
收藏

51CTO技术栈公众号