首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 實現問卷調查結果統計與權重量化分析

     編輯:PHP 綜合知識

項目背景

處理紙質問卷調查數據,受訪者對多項指標(編號 A-J)進行優先級排序,獲得數百份類似 A>I>H>G>D... 的排序結果。目標是量化各指標重要性,得出加權評分排名。

統計邏輯設計

權重分配策略

根據排序位次分配差異化權重:排名越靠前權重越高。例如 10 項指標,第 1 位得 10 分,第 2 位得 9 分...第 10 位得 1 分。統計所有問卷的加權總分,最終得分高者為相對重要指標。

核心算法

  1. 初始化關聯數組記錄各指標累計分數
  2. 逐行讀取文本文件(每行一份問卷結果)
  3. 遍歷字符串字符,根據位置計算權重:權重 = 字符串長度 - 當前索引
  4. 累加至對應指標
  5. 按分數降序排序輸出結果

完整 PHP 實現代碼

<?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()保持鍵值關聯的降序排序

數據文件示例 (file.txt)

ABCDEFGHIJ
BACDEFGHIJ
ACBDEFGHIJ
ABCDFEGHIJ
...(數百行)

擴展優化方向

1. 異常數據處理

// 過濾無效字符、重複字符、長度異常的行
$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; // 無重複

2. 多維度權重模型

可引入位置權重係數,如前 3 位權重遞增更陡峭:

$weights = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]; // 線性
// 或指數級:$weights = [100, 50, 30, 20, 15, 10, 8, 6, 4, 2];

3. 統計顯著性檢驗

引入卡方檢驗或 Friedman 檢驗,判斷排名差異是否具有統計學意義。

總結

本文展示了基於 PHP 的問卷排序數據量化分析完整方案。核心思想是將順序數據轉化為間隔數據進行統計,利用關聯數組累加、arsort 排序等原生函數高效實現。代碼簡潔、邏輯清晰,易於擴展更複雜的統計模型,適合中小規模問卷數據快速分析場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved