我将为您扩展诊断逻辑,使其涵盖更多经典证型和经方对应关系,形成一个更完整的中医诊断系统。
1. 首先更新 prescriptions.php 增加更多经方
<?php
// 经方数据库 - 增强版
$classic_prescriptions = [
// 解表剂
'gui_zhi_tang' => [
'name' => '桂枝汤',
'composition' => '桂枝9g, 芍药9g, 生姜9g, 大枣4枚, 甘草6g',
'indications' => '太阳中风证。头痛发热,汗出恶风,鼻鸣干呕,苔白不渴,脉浮缓或浮弱者。',
'contraindications' => '表实无汗,或表寒里热,不汗出而烦躁者禁用。',
'category' => '解表剂'
],
'ma_huang_tang' => [
'name' => '麻黄汤',
'composition' => '麻黄9g, 桂枝6g, 杏仁6g, 甘草3g',
'indications' => '太阳伤寒证。恶寒发热,头身疼痛,无汗而喘,舌苔薄白,脉浮紧。',
'contraindications' => '表虚自汗、血虚而脉兼尺中迟、误下而见身重心悸者禁用。',
'category' => '解表剂'
],
'sang_ju_yin' => [
'name' => '桑菊饮',
'composition' => '桑叶7.5g, 菊花3g, 杏仁6g, 连翘5g, 薄荷2.5g, 桔梗6g, 甘草2.5g, 芦根6g',
'indications' => '风温初起。咳嗽,身热不甚,口微渴,脉浮数。',
'contraindications' => '风寒咳嗽不宜使用。',
'category' => '解表剂'
],
// 和解剂
'xiao_chai_hu_tang' => [
'name' => '小柴胡汤',
'composition' => '柴胡12g, 黄芩9g, 人参6g, 半夏9g, 甘草5g, 生姜9g, 大枣4枚',
'indications' => '少阳病证。往来寒热,胸胁苦满,默默不欲饮食,心烦喜呕,口苦,咽干,目眩,舌苔薄白,脉弦者。',
'contraindications' => '肝阳上亢、肝火偏盛者慎用。',
'category' => '和解剂'
],
// 清热剂
'bai_hu_tang' => [
'name' => '白虎汤',
'composition' => '石膏30g, 知母9g, 甘草3g, 粳米9g',
'indications' => '阳明气分热盛证。壮热面赤,烦渴引饮,汗出恶热,脉洪大有力。',
'contraindications' => '表证未解的无汗发热,阴虚发热者禁用。',
'category' => '清热剂'
],
// 温里剂
'si_ni_tang' => [
'name' => '四逆汤',
'composition' => '附子15g, 干姜9g, 甘草6g',
'indications' => '少阴病。四肢厥逆,恶寒蜷卧,呕吐不渴,腹痛下利,神衰欲寐,舌苔白滑,脉微细者。',
'contraindications' => '真热假寒者禁用。',
'category' => '温里剂'
],
// 补益剂
'si_jun_zi_tang' => [
'name' => '四君子汤',
'composition' => '人参9g, 白术9g, 茯苓9g, 甘草6g',
'indications' => '脾胃气虚证。面色萎白,语声低微,气短乏力,食少便溏,舌淡苔白,脉虚弱。',
'contraindications' => '实证、热证者不宜使用。',
'category' => '补益剂'
],
// 祛湿剂
'ping_wei_san' => [
'name' => '平胃散',
'composition' => '苍术15g, 厚朴9g, 陈皮9g, 甘草6g',
'indications' => '湿滞脾胃证。脘腹胀满,不思饮食,口淡无味,呕吐恶心,嗳气吞酸,肢体沉重,怠惰嗜卧,常多自利,舌苔白腻而厚,脉缓。',
'contraindications' => '阴虚气滞者慎用。',
'category' => '祛湿剂'
],
// 理血剂
'xue_fu_zhu_yu_tang' => [
'name' => '血府逐瘀汤',
'composition' => '桃仁12g, 红花9g, 当归9g, 生地黄9g, 川芎5g, 赤芍6g, 牛膝9g, 桔梗5g, 柴胡3g, 枳壳6g, 甘草3g',
'indications' => '胸中血瘀证。胸痛,头痛日久,痛如针刺而有定处,或呃逆日久不止,或内热烦闷,或心悸失眠,急躁易怒,入暮潮热,唇暗或两目暗黑,舌质暗红或有瘀斑,脉涩或弦紧。',
'contraindications' => '孕妇及无瘀血者忌用。',
'category' => '理血剂'
]
];
// 症状与经方对应关系 - 增强版
$symptom_prescription_map = [
// 发热相关证型
'fever' => [
'with_sweat' => 'gui_zhi_tang',
'no_sweat' => 'ma_huang_tang',
'alternating_chills_fever' => 'xiao_chai_hu_tang',
'high_fever_thirst' => 'bai_hu_tang',
'mild_fever_cough' => 'sang_ju_yin'
],
// 疼痛相关证型
'pain' => [
'headache_with_sweat' => 'gui_zhi_tang',
'headache_no_sweat' => 'ma_huang_tang',
'chest_pain_fixed' => 'xue_fu_zhu_yu_tang',
'abdominal_pain_cold' => 'si_ni_tang'
],
// 消化系统症状
'digestive' => [
'poor_appetite_thick_coating' => 'ping_wei_san',
'diarrhea_cold_limbs' => 'si_ni_tang',
'weak_fatigue_pale' => 'si_jun_zi_tang'
],
// 四肢症状
'limbs' => [
'cold_limbs_diarrhea' => 'si_ni_tang',
'numbness_purple_tongue' => 'xue_fu_zhu_yu_tang'
],
// 舌象相关
'tongue' => [
'pale_with_white_coating' => 'si_ni_tang',
'red_with_yellow_coating' => 'bai_hu_tang',
'purple_with_ecchymosis' => 'xue_fu_zhu_yu_tang',
'teeth_marks_thick_coating' => 'ping_wei_san'
],
// 脉象相关
'pulse' => [
'floating_tight' => 'ma_huang_tang',
'floating_moderate' => 'gui_zhi_tang',
'wiry' => 'xiao_chai_hu_tang',
'surging' => 'bai_hu_tang',
'thin_weak' => 'si_jun_zi_tang'
]
];
?>
2. 更新 diagnose.php 诊断逻辑
<?php
require_once 'functions.php';
require_once 'prescriptions.php';
// ... (之前的参数获取代码保持不变)
// 增强诊断逻辑
$diagnosis = '';
$recommended_prescription = null;
$diagnosis_notes = [];
$possible_prescriptions = [];
// 1. 根据发热症状辨证
if (isset($symptoms['fever'])) {
$fever_type = $symptoms['fever_type'] ?? '';
$fever_severity = $symptoms['fever_severity'] ?? 2;
if ($fever_type === 'with_sweat') {
$diagnosis = '太阳中风证';
$possible_prescriptions['gui_zhi_tang'] = [
'score' => 10,
'reason' => '发热有汗,符合太阳中风证表现'
];
} elseif ($fever_type === 'no_sweat') {
$diagnosis = '太阳伤寒证';
$possible_prescriptions['ma_huang_tang'] = [
'score' => 10,
'reason' => '发热无汗,符合太阳伤寒证表现'
];
} elseif ($fever_type === 'alternating_chills_fever') {
$diagnosis = '少阳证';
$possible_prescriptions['xiao_chai_hu_tang'] = [
'score' => 10,
'reason' => '寒热往来,符合少阳证表现'
];
} elseif (isset($symptoms['high_fever']) && $symptoms['high_fever'] == '1') {
$diagnosis = '阳明经证';
$possible_prescriptions['bai_hu_tang'] = [
'score' => 9,
'reason' => '高热烦渴,符合阳明经证表现'
];
}
}
// 2. 根据头痛症状辨证
if (isset($symptoms['headache'])) {
$headache_type = $symptoms['headache_type'] ?? '';
if ($headache_type === 'with_sweat') {
$possible_prescriptions['gui_zhi_tang']['score'] += 3;
$possible_prescriptions['gui_zhi_tang']['reason'] .= '; 头痛有汗';
} elseif ($headache_type === 'no_sweat') {
$possible_prescriptions['ma_huang_tang']['score'] += 3;
$possible_prescriptions['ma_huang_tang']['reason'] .= '; 头痛无汗';
}
if (isset($symptoms['headache_fixed']) && $symptoms['headache_fixed'] == '1') {
$possible_prescriptions['xue_fu_zhu_yu_tang'] = [
'score' => 7,
'reason' => '头痛如针刺有定处,提示血瘀证'
];
}
}
// 3. 根据四肢症状辨证
if (isset($symptoms['cold_limbs'])) {
if (isset($symptoms['diarrhea']) && $symptoms['diarrhea'] == '1') {
$diagnosis = '少阴病';
$possible_prescriptions['si_ni_tang'] = [
'score' => 10,
'reason' => '四肢厥冷伴腹泻,符合少阴病表现'
];
}
}
// 4. 根据消化系统症状辨证
if (isset($symptoms['poor_appetite'])) {
if (isset($tongue['coating']) && in_array('thick_coating', $tongue['coating'])) {
$possible_prescriptions['ping_wei_san'] = [
'score' => 8,
'reason' => '食欲不振伴舌苔厚腻,提示湿滞脾胃'
];
}
}
if (isset($symptoms['weak_fatigue'])) {
$possible_prescriptions['si_jun_zi_tang'] = [
'score' => 7,
'reason' => '乏力倦怠,提示脾胃气虚'
];
}
// 5. 根据舌象辨证
if (isset($tongue['body'])) {
if ($tongue['body'] === 'pale' && isset($tongue['coating']) && in_array('white_coating', $tongue['coating'])) {
$possible_prescriptions['si_ni_tang']['score'] = $possible_prescriptions['si_ni_tang']['score'] ?? 0 + 2;
$diagnosis_notes[] = '舌淡苔白提示阳虚';
}
if ($tongue['body'] === 'red' && isset($tongue['coating']) && in_array('yellow_coating', $tongue['coating'])) {
$possible_prescriptions['bai_hu_tang']['score'] = $possible_prescriptions['bai_hu_tang']['score'] ?? 0 + 3;
$diagnosis_notes[] = '舌红苔黄提示里热证';
}
if ($tongue['body'] === 'purple') {
$possible_prescriptions['xue_fu_zhu_yu_tang']['score'] = $possible_prescriptions['xue_fu_zhu_yu_tang']['score'] ?? 0 + 4;
$diagnosis_notes[] = '舌质紫暗提示血瘀证';
}
}
// 6. 根据脉象辨证
if ($pulse) {
switch ($pulse) {
case 'floating_tight':
$possible_prescriptions['ma_huang_tang']['score'] = $possible_prescriptions['ma_huang_tang']['score'] ?? 0 + 2;
$diagnosis_notes[] = '脉浮紧提示表寒实证';
break;
case 'floating_moderate':
$possible_prescriptions['gui_zhi_tang']['score'] = $possible_prescriptions['gui_zhi_tang']['score'] ?? 0 + 2;
$diagnosis_notes[] = '脉浮缓提示太阳中风';
break;
case 'wiry':
$possible_prescriptions['xiao_chai_hu_tang']['score'] = $possible_prescriptions['xiao_chai_hu_tang']['score'] ?? 0 + 3;
$diagnosis_notes[] = '脉弦提示少阳病';
break;
case 'surging':
$possible_prescriptions['bai_hu_tang']['score'] = $possible_prescriptions['bai_hu_tang']['score'] ?? 0 + 3;
$diagnosis_notes[] = '脉洪大提示阳明热盛';
break;
case 'thin_weak':
$possible_prescriptions['si_jun_zi_tang']['score'] = $possible_prescriptions['si_jun_zi_tang']['score'] ?? 0 + 3;
$diagnosis_notes[] = '脉细弱提示气虚';
break;
}
}
// 确定最终推荐的经方
if (!empty($possible_prescriptions)) {
// 按分数排序
uasort($possible_prescriptions, function($a, $b) {
return $b['score'] <=> $a['score'];
});
// 获取分数最高的经方
$top_prescription = key($possible_prescriptions);
$recommended_prescription = $classic_prescriptions[$top_prescription];
$diagnosis_notes[] = "推荐依据: " . $possible_prescriptions[$top_prescription]['reason'];
// 如果没有明确的诊断名称,使用经方的主治证型
if (empty($diagnosis)) {
$diagnosis = $recommended_prescription['indications'];
}
}
// 如果没有匹配到特定证型,提供一般建议
if (empty($diagnosis)) {
$diagnosis = '四诊信息不足,请提供更多症状细节';
$diagnosis_notes[] = '未能根据现有症状明确辨证';
}
// 添加脉象和舌象分析到诊断依据
if ($pulse) {
$diagnosis_notes[] = '脉象: ' . $pulse;
}
if (isset($tongue['body'])) {
$diagnosis_notes[] = '舌质: ' . get_tongue_description($tongue['body']);
}
if (isset($tongue['coating'])) {
$coating_descriptions = array_map('get_tongue_description', (array)$tongue['coating']);
$diagnosis_notes[] = '舌苔: ' . implode(', ', $coating_descriptions);
}
// 显示结果部分保持不变...
?>
3. 更新 index.php 增加更多症状选项
<!-- 在症状部分增加更多选项 -->
<fieldset>
<legend>主要症状</legend>
<!-- 发热症状组 -->
<div class="symptom-group">
<h3>发热</h3>
<div class="form-group">
<label>
<input type="checkbox" name="symptoms[fever]" value="1" <?php echo isset($symptoms['fever']) ? 'checked' : ''; ?>>
有发热
</label>
</div>
<div class="form-group sub-symptom">
<label>发热类型:</label>
<select name="symptoms[fever_type]">
<option value="">-- 请选择 --</option>
<option value="with_sweat" <?php echo (isset($symptoms['fever_type']) && $symptoms['fever_type'] === 'with_sweat') ? 'selected' : ''; ?>>有汗</option>
<option value="no_sweat" <?php echo (isset($symptoms['fever_type']) && $symptoms['fever_type'] === 'no_sweat') ? 'selected' : ''; ?>>无汗</option>
<option value="alternating_chills_fever" <?php echo (isset($symptoms['fever_type']) && $symptoms['fever_type'] === 'alternating_chills_fever') ? 'selected' : ''; ?>>寒热往来</option>
</select>
</div>
<div class="form-group sub-symptom">
<label>严重程度:</label>
<select name="symptoms[fever_severity]">
<option value="1" <?php echo (isset($symptoms['fever_severity']) && $symptoms['fever_severity'] == '1') ? 'selected' : ''; ?>>轻微</option>
<option value="2" <?php echo (!isset($symptoms['fever_severity']) || (isset($symptoms['fever_severity']) && $symptoms['fever_severity'] == '2')) ? 'selected' : ''; ?>>中度</option>
<option value="3" <?php echo (isset($symptoms['fever_severity']) && $symptoms['fever_severity'] == '3') ? 'selected' : ''; ?>>严重</option>
</select>
</div>
<div class="form-group sub-symptom">
<label>
<input type="checkbox" name="symptoms[high_fever]" value="1" <?php echo isset($symptoms['high_fever']) ? 'checked' : ''; ?>>
高热(39°C以上)
</label>
</div>
<div class="form-group sub-symptom">
<label>
<input type="checkbox" name="symptoms[thirst]" value="1" <?php echo isset($symptoms['thirst']) ? 'checked' : ''; ?>>
口渴喜饮
</label>
</div>
</div>
<!-- 疼痛症状组 -->
<div class="symptom-group">
<h3>疼痛</h3>
<div class="form-group">
<label>
<input type="checkbox" name="symptoms[headache]" value="1" <?php echo isset($symptoms['headache']) ? 'checked' : ''; ?>>
头痛
</label>
</div>
<div class="form-group sub-symptom">
<label>头痛类型:</label>
<select name="symptoms[headache_type]">
<option value="">-- 请选择 --</option>
<option value="with_sweat" <?php echo (isset($symptoms['headache_type']) && $symptoms['headache_type'] === 'with_sweat') ? 'selected' : ''; ?>>有汗</option>
<option value="no_sweat" <?php echo (isset($symptoms['headache_type']) && $symptoms['headache_type'] === 'no_sweat') ? 'selected' : ''; ?>>无汗</option>
</select>
</div>
<div class="form-group sub-symptom">
<label>
<input type="checkbox" name="symptoms[headache_fixed]" value="1" <?php echo isset($symptoms['headache_fixed']) ? 'checked' : ''; ?>>
痛处固定
</label>
</div>
<div class="form-group">
<label>
<input type="checkbox" name="symptoms[chest_pain]" value="1" <?php echo isset($symptoms['chest_pain']) ? 'checked' : ''; ?>>
胸痛
</label>
</div>
<div class="form-group">
<label>
<input type="checkbox" name="symptoms[abdominal_pain]" value="1" <?php echo isset($symptoms['abdominal_pain']) ? 'checked' : ''; ?>>
腹痛
</label>
</div>
</div>
<!-- 消化系统症状组 -->
<div class="symptom-group">
<h3>消化系统</h3>
<div class="form-group">
<label>
<input type="checkbox" name="symptoms[poor_appetite]" value="1" <?php echo isset($symptoms['poor_appetite']) ? 'checked' : ''; ?>>
食欲不振
</label>
</div>
<div class="form-group">
<label>
<input type="checkbox" name="symptoms[diarrhea]" value="1" <?php echo isset($symptoms['diarrhea']) ? 'checked' : ''; ?>>
腹泻
</label>
</div>
<div class="form-group">
<label>
<input type="checkbox" name="symptoms[weak_fatigue]" value="1" <?php echo isset($symptoms['weak_fatigue']) ? 'checked' : ''; ?>>
乏力倦怠
</label>
</div>
</div>
<!-- 四肢症状组 -->
<div class="symptom-group">
<h3>四肢症状</h3>
<div class="form-group">
<label>
<input type="checkbox" name="symptoms[cold_limbs]" value="1" <?php echo isset($symptoms['cold_limbs']) ? 'checked' : ''; ?>>
四肢厥冷
</label>
</div>
<div class="form-group">
<label>
<input type="checkbox" name="symptoms[numbness]" value="1" <?php echo isset($symptoms['numbness']) ? 'checked' : ''; ?>>
肢体麻木
</label>
</div>
</div>
</fieldset>
<!-- 更新脉象选项 -->
<fieldset>
<legend>脉象</legend>
<div class="form-group">
<label for="pulse">脉象:</label>
<select id="pulse" name="pulse" required>
<option value="">-- 请选择 --</option>
<option value="floating_tight" <?php echo ($pulse === 'floating_tight') ? 'selected' : ''; ?>>浮紧</option>
<option value="floating_moderate" <?php echo ($pulse === 'floating_moderate') ? 'selected' : ''; ?>>浮缓</option>
<option value="sinking" <?php echo ($pulse === 'sinking') ? 'selected' : ''; ?>>沉</option>
<option value="wiry" <?php echo ($pulse === 'wiry') ? 'selected' : ''; ?>>弦</option>
<option value="surging" <?php echo ($pulse === 'surging') ? 'selected' : ''; ?>>洪大</option>
<option value="thin_weak" <?php echo ($pulse === 'thin_weak') ? 'selected' : ''; ?>>细弱</option>
<option value="slippery" <?php echo ($pulse === 'slippery') ? 'selected' : ''; ?>>滑</option>
<option value="rapid" <?php echo ($pulse === 'rapid') ? 'selected' : ''; ?>>数</option>
</select>
</div>
</fieldset>
诊断逻辑增强说明
- 多维度辨证:
- 现在系统会综合考虑发热、疼痛、消化系统症状、四肢症状、舌象和脉象
- 采用评分机制,不同症状组合会增加相关经方的推荐分数
- 新增证型覆盖:
- 太阳病(中风/伤寒)
- 少阳病
- 阳明病
- 少阴病
- 脾胃气虚
- 湿滞脾胃
- 血瘀证
- 更智能的推荐系统:
- 当多个经方可能适用时,系统会选择分数最高的
- 提供详细的推荐依据说明
- 更全面的症状收集:
- 增加了消化系统症状
- 细化了疼痛特征
- 完善了脉象分类
这个增强版的诊断系统能够处理更复杂的中医辨证场景,提供更准确的经方推荐。您可以根据需要继续扩展症状和经方数据库。

Leave a Reply