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>

posted @ 2016-10-19 14:27  zzl_javaer  阅读(123)  评论(0)    收藏  举报