處理紙質問卷調查數據,受訪者對多項指標(編號 A-J)進行優先級排序,獲得數百份類似 A>I>H>G>D... 的排序結果。目標是量化各指標重要性,得出加權評分排名。
根據排序位次分配差異化權重:排名越靠前權重越高。例如 10 項指標,第 1 位得 10 分,第 2 位得 9 分...第 10 位得 1 分。統計所有問卷的加權總分,最終得分高者為相對重要指標。
權重 = 字符串長度 - 當前索引<?php
/**
* 問卷調查結果統計
* 數據源:file.txt,每行一份問卷,如 "ABCDEFGHIJ"
*/
// 初始化 10 項指標得分
$scores = array(
"A" => 0, "B" => 0, "C" => 0, "D" => 0, "E" => 0,
"F" => 0, "G" => 0, "H" => 0, "I" => 0, "J" => 0
);
$handle = fopen('./file.txt', 'r');
if ($handle) {
while (!feof($handle)) {
$line = fgets($handle, 1024);
$line = trim($line); // 去除首尾空白換行
if (empty($line)) continue; // 跳過空行
$len = strlen($line);
for ($i = 0; $i < $len; $i++) {
$char = strtoupper($line[$i]);
// 僅統計有效指標字符
if (isset($scores[$char])) {
// 權重 = 總長度 - 當前索引(首位得最高分)
$scores[$char] += $len - $i;
}
}
}
fclose($handle);
}
// 降序排序保持鍵值關聯
arsort($scores);
// 輸出結果
echo "問卷統計結果(按重要性排序):\n";
foreach ($scores as $item => $score) {
echo "{$item}: {$score} 分\n";
}
// 結構化輸出供程序調用
var_dump($scores);
?>
| 技術點 | 實現方式 | 說明 |
|---|---|---|
| 文件讀取 | fopen + fgets + feof | 流式讀取大文件,內存效率高 |
| 字符遍歷 | for 循環 + 字符串索引 | PHP 字符串可當數組訪問單字符 |
| 大小寫統一 | strtoupper() | 兼容用戶輸入大小寫不一 |
| 關聯數組累加 | $scores[$char] += ... | 鍵名即指標編號,值為累計分 |
| 降序排序 | arsort() | 保持鍵值關聯的降序排序 |
ABCDEFGHIJ
BACDEFGHIJ
ACBDEFGHIJ
ABCDFEGHIJ
...(數百行)
// 過濾無效字符、重複字符、長度異常的行
$validChars = array_flip(range('A', 'J'));
$line = preg_replace('/[^A-J]/i', '', $line); // 只保留 A-J
if (strlen($line) !== 10) continue; // 必須 10 項全排序
if (count(array_unique(str_split($line))) !== 10) continue; // 無重複
可引入位置權重係數,如前 3 位權重遞增更陡峭:
$weights = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]; // 線性 // 或指數級:$weights = [100, 50, 30, 20, 15, 10, 8, 6, 4, 2];
引入卡方檢驗或 Friedman 檢驗,判斷排名差異是否具有統計學意義。
本文展示了基於 PHP 的問卷排序數據量化分析完整方案。核心思想是將順序數據轉化為間隔數據進行統計,利用關聯數組累加、arsort 排序等原生函數高效實現。代碼簡潔、邏輯清晰,易於擴展更複雜的統計模型,適合中小規模問卷數據快速分析場景。