[分享] 自製簡單統計函式 (跟統計學什麼的無關)
<?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
08/16 00:23, 1F
→
08/16 00:26, , 2F
08/16 00:26, 2F
PHP 近期熱門文章
PTT數位生活區 即時熱門文章