喜悦国际村 » PHP高级编程 » 发一段代码,看看大家能优化不?

页: [1]
buntime2007-3-17 03:30 PM
发一段代码,看看大家能优化不?

发一段代码,看看大家能优化不?
[php]<?php
//成份列表
//重複出現的東西,出現率會比較高。總長度建議不要超過255。
$elements=array(
'屍毒',
'御宅氣',
'高手高手高高手',
'雜魚',
'高頻雜訊',
'黑暗',
'死靈怨影',
'三鋰水晶',
'空間扭曲',
'時空斷層',
'微型黑洞',
'微波雷射',
'化屍水',
'王水'

);

//方便使用的str_split,撿來的
//str_split在PHP5有,但是PHP4沒有 T__T
if(!function_exists('str_split')){
   function str_split($string,$split_length=1){
       $count = strlen($string);
       if($split_length < 1){
           return false;
       } elseif($split_length > $count){
           return array($string);
       } else {
           $num = (int)ceil($count/$split_length);
           $ret = array();
           for($i=0;$i<$num;$i++){
               $ret[] = substr($string,$i*$split_length,$split_length);
           }
           return $ret;
       }     
   }
}

//傳入整數(或整數字串)X,pointer會向後移動X,然後傳回該位置的元素名。
//到陣列結尾就重頭開始
$pointer=0;
function get_element($id){
        if(!is_numeric($id)) return 'Error!';
        else{
                global $elements;
                global $pointer;
                eval("\$pointer+=$id;");
                $pointer%=count($elements);
                return $elements[$pointer];
        }
}


$result_string='';
if( isset($_POST['name']) && $_POST['name']!=''){//結果模式
        if(strlen($_POST['name']) > 256){//對名字長度作出限制,以免Hash跑太久
                $result_string='您輸入的名字太長了。';
        }
        else{//計算結果
                $input_string = strtoupper($_POST['name']);
                $input_hash = md5($input_string);

                $hase_length=strlen($input_hash);
                $chunks=str_split($input_hash,2);


                // $elist[成份名稱]=成份含量
                $total_quantity=0;//成份總量
                for($i=0; $i < count($chunks); $i+=2){
                        $current_component=get_element("0x{$chunks[$i]}");
                        eval("\$current_quantity=0x{$chunks[$i+1]};");
                        $current_quantity*=$current_quantity*$current_quantity;//三次方,將大量成份跟少量成分的距離拉大
                        $total_quantity+=$current_quantity;
                       
                        if(isset( $elist[$current_component] ) ){
                                $elist[$current_component]+=$current_quantity;
                        }
                        else{
                                $elist[$current_component]=$current_quantity;
                        }
                }
                //sort
                arsort($elist);
                $result_string.="<p>{$_POST['name']}的成分:</p>\n<ul>\n";
                foreach($elist as $k => $v){
                        $percent=number_format( 100*$elist[$k]/$total_quantity, 2);
                        if( ereg('0.0[0-9]',$percent) ) continue;//太少的東西就不顯示了
                        else{
                                $result_string.="<li>{$k}:{$percent}%</li>\n";
                        }
                }
                $result_string.="</ul>\n<hr />\n";



        }
}//結果輸出模式結束


?>
<html><head><title>题目</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>
<?php echo($result_string); ?>
<form name="form1" id="form1" method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
<p>請輸入你的名字:<input name="name" type="text" id="name" maxlength="256" /></p>
<p><input type="submit" name="Submit" value="分析結果" /></p>
</form>
</body></html>
[/php]

剑枫2007-3-18 04:02 AM
代码写的很标准啊,echo()

buntime2007-3-18 05:09 PM
大家都说说吧!

QQ1102007-3-19 03:31 AM
哪的哥们?:(竟然繁体 晕

era2007-3-19 03:52 AM
那两个地方为什么用eval?给个理由?


查看完整版本: 发一段代码,看看大家能优化不?


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 0.009316 second(s), 2 queries