[分享] 自製簡單統計函式 (跟統計學什麼的無關)

看板PHP作者 (HKC === KFC //false)時間17年前 (2008/08/15 22:30), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
<?php /**************************************************************** 統計函式 (statistics) array statistics ( mixed $something [, bool $clean] ) 簡介: 可以利用這個函式的第一個參數將想要統計的資料直接加入, 而加入的資料會成為輸出陣列鍵的名稱,其值為該資料重複加入的 次數。這個函式很適合統計許多隨機的數字中,各個數字出現的次 數。但又不僅可以做到如此,甚至比 PHP 內建的 array_count_values 函式支援更廣的變數型態,當然可能會犧牲 效率。 作者: hkc - hysnkc@yahoo.com.tw - http://hkc.tw/ 參數: something 任何想加入統計的資料,可以是布林值、整數、浮點數、字 串,甚至可以是陣列,但除上面的格式外一概傳回值 -1 clean 這個參數是可以不用給予值的,但當傳入布林值 TRUE 會將 統計資料全數清除 注意:加入的資料的量盡量不要超過 1000 個,以免程式執行超 過 php.ini 中設定的時間。 傳回值: 如果給予參數為布林值、整數、浮點數、字串或陣列,會輸出 一個陣列,裡面包含先前加入統計的所有資料,以及它們被加入統 計的次數。 範例: <?php statistics("apple"); //加入統計可以是字串 statistics("orange"); statistics(3.1416); //可以是浮點數,不過小數點(.)會轉換為底線(_) statistics(true); //可以是布林值 $arr = array("apple", "banana", "watermelon"); statistics($arr); //也可以是陣列,不過陣列會被拆解 $stics = statistics(""); //傳一個空白字串可以直接取得統計陣列 print_r($stics); // Print // Array // ( // [3_1416] => 1 // [TRUE] => 1 // [apple] => 2 // [banana] => 1 // [orange] => 1 // [watermelon] => 1 // ) statistics("", true); //當 clean 為 true 時會清空所有統計資料 //注意,如果你要清空統計資料時第一個參數必須要有值,任意即可 $stics = statistics(""); print_r($stics); //Print Array() ?> 實用範例: for ($i = 0; $i < 50; $i++) { $rnd = rand(1, 50); statistics($rnd); } $stics = statistics(""); foreach ($stics as $key => $value) { echo "數字 $key 一共出現 $value 次。<br />\n"; } 修正: 2008/08/15 釋出第一個版本 ****************************************************************/ function statistics($something, $clean = false) { static $num; if ($clean) { //統計資料清空 foreach($num as $key => $value) { unset($num[$key]); } unset($num); return; } if (isset($something)) { //直接傳回值的特殊狀況 if ($something === '') { if (is_array($num)) { return $num; } else { return -1; } } switch (gettype($something)) { case 'boolean': //布林值轉成可辨認的字串 $something = ($something) ? 'TRUE' : 'FALSE'; case 'double': case 'float': if (!is_string($something)) { //保留浮點數將小數點改為底線 $something = str_replace('.', '_', (string) $something); } case 'integer': case 'string': break; case 'array': //類似遞迴將陣列內容丟回本函式分析 foreach ($something as $value) { $statistics = statistics($value); } return $statistics; break; default: return -1; break; } //累加數字 @$num[$something]++; //以陣列的鍵從小到大排序 ksort($num); return $num; } } ?> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.228.89.76

08/16 00:23, , 1F
http://hkc.tw/ 連不到東西XD
08/16 00:23, 1F

08/16 00:26, , 2F
因為還沒做呀XDD~ 目前只有http://dev.hkc.tw/供連
08/16 00:26, 2F
文章代碼(AID): #18fPC6TV (PHP)
文章代碼(AID): #18fPC6TV (PHP)