/** * 计算样本平中某一项的平均值 * @param array $reqs 样本列表 * @param string $key 指定本函数对哪一个数据项进行求值运算 * @return number 均值 */ public static function avg($reqs, $key) { $list = array(); foreach ($reqs as $req) { if ($req[$key] && $req[$key] > 0) { $list[] = $req[$key]; } } if (count($list) <= 0) { return 0; } $removed = Util_Grubbs::run($list, self::P); $result = (array_sum($list) - array_sum($removed)) / (count($list) - count($removed)); return (int) $result; }
/** * 检查样本情况进行优选 * @param array $pcData PC样本数据 * @param array keys 所有的key * @param array pcKeys 所有的pc样本的key * @param array $condition 条件统计结果 * @param int $pcNumber pc样本数量 * @param int $mobileNumber 移动样本数量 */ public static function check($url, $pcData, &$keys, &$pcKeys, &$condition, &$pcNumber) { $errorSamples = array(); $nomalSamples = array(); foreach ($pcData as $key => $data) { $errorCode = $data["firstView"]["basic"]["errorCode"]; //if ($errorCode >= 99996 && $errorCode <= 99998) { //不管错误 //$errorSamples[$key] = $errorCode; //由于客户端bug,极少数情况返回回来的样本不是本次测试的网址,需要过滤 if ($data["firstView"]["basic"]["URL"] != $url) { $errorSamples[$key] = 'URL not match'; } else { if ($data['firstView']['basic']['fullyLoaded'] == 0) { $errorSamples[$key] = 'fullyloaded is 0'; } else { $nomalSamples[$key] = $data["firstView"]["basic"]["fullyLoaded"]; } } } //格拉布斯检验法识别错误样本 $abnormalSamples = Util_Grubbs::run($nomalSamples, 99.5); foreach ($abnormalSamples as $key => $value) { $errorSamples[$key] = "time_abnormal: {$value}"; } foreach ($errorSamples as $key => $v) { $keys = self::delKey($keys, $key); $pcKeys = self::delKey($pcKeys, $key); foreach ($condition["data"]["pc"] as $cls => $cData) { foreach ($cData as $cKey => $cList) { $condition["data"]["pc"][$cls][$cKey] = self::delKey($cList, $key); } } } $pcNumber = $pcNumber - count($errorSamples); return $errorSamples; }