php学习 (二)
1.2:求两个集合的并集和交集
做一个页面,上面有两个文本编辑框和两个按钮,在两个文本编辑框中各输入一个集合,一个按钮是求两个集合的并集,一个按钮是求两个集合的交集,点击按钮后,将结果显示在页面上,交集并集不能用系统函数,要求自己重新写
请输入两个集合:(集合元素间用.隔开)
代码实现如下:
Test1.2.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<?php
echo "1.2:求两个集合的并集和交集";
echo "<br>";
echo "做一个页面,上面有两个文本编辑框和两个按钮,在两个文本编辑框中各输入一个集合,一个按钮是求两个集合的并集,一个按钮是求两个集合的交集,点击按钮后,将结果显示在页面上,交集并集不能用系统函数,要求自己重新写";
echo "<br>";
?>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
请输入两个集合:(集合元素间用.隔开)<br>
<input type="text" name="txt1"><br>
<input type="text" name="txt2"><br>
<input type="submit" value="求交集" name="btn"><br>
<input type="submit" value="求并集" name="btn"><br>
</form>
<?php
$txt1=$txt2="";
$t1=$t2=array(); //表示集合一和集合二的数组
if ($_SERVER["REQUEST_METHOD"] == "POST"){
$txt1 = testInput($_POST["txt1"]); //获取文本框中的集合信息
$txt2 = testInput($_POST["txt2"]);
if( preg_match("/[\',:;*?~`!@#$%^&+=)(<>{}]|\]|\[|\/|\\\|\"|\|/",$txt1)
||preg_match("/[\',:;*?~`!@#$%^&+=)(<>{}]|\]|\[|\/|\\\|\"|\|/",$txt2) ){ //文本框不允许输入特殊字符
echo "包含特殊字符或者输入格式有误";
}else {
echo "第一个集合元素:<br>"; //打印第一个集合的数据并把数据保存在$t1数组
$t1=stringToArray($txt1);
print_r($t1);
echo "<br>第二个集合元素:<br>"; //打印第二个集合的数据并把数据保存在$t2数组
$t2=stringToArray($txt2);
print_r($t2);
if($_POST["btn"]=="求交集"){
echo "<br>交集为:<br>";
print_r(intersection($t1, $t2));
}else {
echo "<br>并集为:<br>";
print_r(union($t1, $t2));
}
}
}
//explode($delimiter, $string)
function stringToArray($str){ //将1,2,3,4这样的字符串处理成数组
$j=0;
$arry=array();
for($i=0;$i<strlen($str);$i++){
if($str[$i]=='.')
{
$arry[]="".substr($str,$j,$i-$j);
$j=$i+1;
}
}
$arry[]="".substr($str, $j);
return $arry;
}
function intersection($arry1,$arry2){ //求两个数组的交集
$t3=array();
$flag=0; //对T3数组第一次赋值的标识
for($i=0;$i<count($arry1);$i++){
for($j=0;$j<count($arry2);$j++)
{
$flag2=false; //对是否t3数组有相同的值的标识
if($arry1[$i]==$arry2[$j])
{
if($flag===0){
$t3[]=$arry1[$i];
}else {
$flag2=isHave($arry1[$i], $t3);
if($flag2===true){
$t3[]=$arry1[$i];
}
}
$flag++;
}
}
}
return $t3;
}
function isHave($val,$arry){ //判断该元素是否在数组元素中
$flag=0;
for($v=0;$v<count($arry);$v++){
if($val==$arry[$v])
$flag=1;
}
if($flag==0){
return true;
}else
return false;
}
function union($arry1,$arry2){ //求两个数组的并集
$arry3=array();
$arry=array();
$arry3=findDifferentBetweenTwoArray($arry1,$arry2); //找出第一个数组和第二个数组不同的元素,加入到数组t3中
$arry3=array_merge($arry3,findDifferentBetweenTwoArray($arry2,$arry1)); //找出第二个数组和第一个数组不同的元素,加入到数组t3中
$arry=intersection($arry1,$arry2); //求交集
$arry3=array_merge($arry3,$arry); //合并不同的元素集合和交集得到并集
return $arry3;
}
function findDifferentBetweenTwoArray($arry1,$arry2){ //找出第一个数组和第二个数组不同的元素,返回一个数组
$arry3=array();
for($i=0;$i<count($arry1);$i++){
if(isHave($arry1[$i],$arry2)&&isHave($arry1[$i],$arry3))
$arry3[]=$arry1[$i];
}
return $arry3;
}
function testInput($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
</body>
</html>

浙公网安备 33010602011771号