日期:2014-05-17  浏览次数:20562 次

PHP趣味开发一

最近时间有些充裕,利用PHP实现了几个有意思的东东,拿来分享一下:

<?php 
/**
 * php画个菱形
 * 
 * 思路:多少行for一次,然后在里面空格和标记符号for一次。
 * 
 * @author flyer0126
 * @date 2011-12-09
 * 
 */

//上半部分
for ($i=0; $i<10; $i++){
	for ($j=0; $j<9-$i; $j++){
		echo "&nbsp;";
	}
	for ($k=0; $k<(2*$i+1); $k++){
		echo "`";
	}
	echo "<br/>";
}

//下半部分
for ($i=1; $i<10; $i++){
	for ($j=0; $j<$i; $j++){
		echo "&nbsp;";
	}
	for ($k=(18-2*$i+1); $k>0; $k--){
		echo "`";
	}
	echo "<br/>";
}

/**
 * PHP实现杨辉三角
 * 
 * 思路:每一行的第一位和最后一位是1,没有变化,中间是前排一位与左边一排的和,这种算法是用一个二维数组保存,一行一行的输出。
 * 1
   1 1
   1 2 1
   1 3 3 1
   1 4 6 4 1
   1 5 10 10 5 1
 *
 * @author flyer0126
 * @date 2011-12-09
 * 
 */

//变量初始化
$arr = array();

//设置固定值1
for ($i=0; $i<6; $i++){
	$arr[$i][0] = 1;
	$arr[$i][$i] = 1;
}

//计算中间值
for ($i=2; $i<6; $i++){
	for ($j=1; $j<$i; $j++){
		$arr[$i][$j] = $arr[$i-1][$j-1] + $arr[$i-1][$j];
	}
}

//排列输出展示
for ($i=0; $i<count($arr); $i++){
	for ($j=0; $j<count($arr[$i]); $j++){
		echo $arr[$i][$j]."&nbsp;";
	}
	echo "<br/>";
}

/**
 * 在一组数中,要求插入一个数,按其原来顺序插入,维护原来排序方式。
 * 
 * 思路:找到比要插入数大的那个位置,替换,然后把后面的数后移一位。
 * 
 * @author flyer0126
 * @date 2011-12-08
 * 
 */

//初始化数组变量(升序)
$arr = array(1, 3, 5, 7, 9);

//插入6
for ($i=0; $i<count($arr); $i++){
	if($arr[$i] < 6 && 6 < $arr[$i+1]){
		$tmp1 = $arr[$i+1];
		$k = count($arr)+1;
		$arr[$i+1] = 6;
		for ($j=$i+2; $j<$k; $j++){
			($k > $j+1) ? $tmp2 = $arr[$j] : '';
			$arr[$j] = $tmp1;
			$tmp1 = $tmp2;
		}
		break;
	}	
}

//输出
print_r($arr);
//Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 6 [4] => 7 [5] => 9 ) 

?>