Karar Ağacı - ... daha iyi bir yolu olmalı?

2 Cevap php

Aşağıda sadece korkunç ... daha iyi bir yolu yoktur benim yolum, bir karar ağacı oluşturma temel bir yolu olsa ... Sorun CSS kontrolü ve kod çıkış yolu oluyor mu?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style>
#SwitchPicker .title{
width: 100%;
margin:auto;
text-align:center;
}
#SwitchPicker .twinanswer{
width:400px;
background:url(images/2ans.jpg) no-repeat;
margin:auto;
height:110px;
}
#SwitchPicker .answer-bottom-left {
padding-top:90px;
width:50%;
float:left;
}
#SwitchPicker .answer-bottom-right {
padding-top:90px;
width:50%;
float:left;
text-align:right;
}
#SwitchPicker .trioanswer{
width:400px;
background:url(images/3ans.jpg) no-repeat;
margin:auto;
height:110px;
}
#SwitchPicker .trio-answer-bottom-left {
padding-top:90px;
width:33%;
float:left;
}
#SwitchPicker .trio-answer-bottom-mid {
padding-top:90px;
width:33%;
float:left;
text-align:center;
}
#SwitchPicker .trio-answer-bottom-right {
padding-top:90px;
width:33%;
float:left;
text-align:right;
}
#SwitchPicker .answer{
width:50%;
float:left;
margin:auto;
text-align:center;
}
#SwitchPicker .answers{
width:40%;
padding-left:30%;
padding-right:30%;
margin:auto;
}
#SwitchPicker .detail {
display:none;
}
#SwitchPicker .answer-left {
margin-top:10px;
width:50%;
padding-left:13%;
}
#SwitchPicker .answer-right {
margin-top:10px;
width:50%;
padding-left:37%;
}
#SwitchPicker .answer-left-left {
margin-top:10px;
width:50%;
padding-left:3%;
}
#SwitchPicker .answer-left-right {
margin-top:10px;
width:50%;
padding-left:23%;
}
#SwitchPicker .answer-mid-left {
margin-top:10px;
width:50%;
padding-left:14%;
}
#SwitchPicker .answer-mid-right {
margin-top:10px;
width:50%;
padding-left:36%;
}
#SwitchPicker .answer-right-left {
margin-top:10px;
width:50%;
padding-left:27%;
}
#SwitchPicker .answer-right-right {
margin-top:10px;
width:50%;
padding-left:48%;
}
</style>
</head>
<?php
// Managed or Unmanaged
if ($_GET['st'] == "managed"){
$a1 = "answer-left";
$switch_type = $_GET['st'];
}
else if ($_GET['st'] == "unmanaged"){
$a1 = "answer-right";
$switch_type = $_GET['st'];
}
else if ($_GET['st'] == "smart"){
$a1 = "answer-mid";
$switch_type = $_GET['st'];
}
else {
echo "";
}
// Fast Ethernet or Gigabit
if (($_GET['st'] == "managed") && ($_GET['ss'] == 100)){
$a2 = "answer-left-left";
$switch_type = $_GET['st'];
$switch_speed = $_GET['ss'];
}
else if (($_GET['st'] == "managed") && ($_GET['ss'] == 1000)){
$a2 = "answer-left-right";
$switch_type = $_GET['st'];
$switch_speed = $_GET['ss'];
}
else if (($_GET['st'] == "unmanaged") && ($_GET['ss'] == 100)){
$a2 = "answer-right-left";
$switch_type = $_GET['st'];
$switch_speed = $_GET['ss'];
}
else if (($_GET['st'] == "unmanaged") && ($_GET['ss'] == 1000)){
$a2 = "answer-right-right";
$switch_type = $_GET['st'];
$switch_speed = $_GET['ss'];
}
else if (($_GET['st'] == "smart") && ($_GET['ss'] == 100)){
$a2 = "answer-mid-left";
$switch_type = $_GET['st'];
$switch_speed = $_GET['ss'];
}
else if (($_GET['st'] == "smart") && ($_GET['ss'] == 1000)){
$a2 = "answer-mid-right";
$switch_type = $_GET['st'];
$switch_speed = $_GET['ss'];
}
else {
echo "";
}
?>
<body id="SwitchPicker">
<div class="title">Small Business Decision Tree</div>
<div class="title">Managed or Unmanaged</div>
<div class="trioanswer">
  <div class="trio-answer-bottom-left"><a href="index.php?st=managed">Managed</a></div>
  <div class="trio-answer-bottom-mid"><a href="index.php?st=smart">Smart</a></div>
  <div class="trio-answer-bottom-right"><a href="index.php?st=unmanaged">Unmanaged</a></div>
</div>
<? 
if (isset($_GET['st'])) {
echo"
  <div class=\"" .$a1. "\">
    <div class=\"title\">Switch Speed?</div>
    	<div class=\"twinanswer\">
    		<div class=\"answer-bottom-left\"><a href=\"index.php?st=" .$switch_type. "&ss=100\">Fast Ethernet (10/100)</a></div>
    		<div class=\"answer-bottom-right\"><a href=\"index.php?st=" .$switch_type. "&ss=1000\">GigabitEthernet (1000)</a></div>
        </div>
    </div>";
    }
else {
echo "";
}
?>
<?
if (isset($_GET['ss'])) {
echo"
    <div class=\"" .$a2. "\">
    <div class=\"title\">Switch Size?</div>
    	<div class=\"twinanswer\">
    		<div class=\"answer-bottom-left\"><a href=\"index.php?st=" .$switch_type. "&ss=" .$switch_speed. "&ssize=desk\">Desktop</a></div>
    		<div class=\"answer-bottom-right\"><a href=\"index.php?st=" .$switch_type. "&ss=" .$switch_speed. "&ssize=rack\">Rack-mountable</a>			</div>
        </div>
    </div>";
    }
else {
echo "";
}
?>
</body>
</html>

Thanks, B.

2 Cevap

İlk başta satırları sürebilir

$switch_type = $_GET['st'];
$switch_speed = $_GET['ss'];

koşullar dışında, her yerde aynıdır. Sadece / elses önce veya sonra bir kez bunu.

Ayrıca ben $ a2 her alt kısmı, belirli bir koşula bağlı olduğunu, bkz. Belki aşağıdaki (pseudo-code) şekilde inşa edebilirsiniz:

...
//$a2 always starts the same
$a2 = "answer";

// Type of line
switch($_GET['st']) {
  case "managed":
    $a2 = $a2 + "-left"; break;
  case "unmanaged":
    $a2 = $a2 + "-right"; break;
  case "smart":
    $a2 = $a2 + "-mid"; break;
}

// speed of line
switch($_GET['ss']) {
  case 100:
    $a2 = $a2 + "-left"; break;
  case 1000:
    $a2 = $a2 + "-right"; break;
}
....

O $ a2 böylece 'cevabı-sola-sağa' gibi birleşik değerlerini tutmak ve gerekir sonra. Benzer bir yaklaşım, $ a1 ile yapılabilir ama burada daha iyi uygun gibi ben örneğin $ a2 seçti.

Ben geçmişte bu için ilişkilendirilebilir diziler kullandım.

Sizin durumda, ["st"] $ _GET ayrıştırma & edilmelidir Yazısının üstündeki $ _GET ["ss"]. Yani iki değişken $ st ve $ ss içine bu yakala (ve siz de onlara doğrulama yapıyor olmalıdır!). Verildiği gibi, sen gibi bir şey gelebilir ki Çekildiği:

$st_choices = array (
    'managed'    => array (
        '1000'         =>  array (
            'key1'          => 'val1',
            'key2'          => 'val2'
         );
     ),
     'a1'        => 'answer-left',
     'a2'        => 'another-value'

     /** ... **/
);

Sonra dizi erişmek için bir arama işlevini kullanın.

Daha unsurlar ekleyerek basitçe yerine if / else if / else şube daha ekleyerek, yukarıdaki biçimde diziye eklemek anlamına gelir.

function return_details($st, $ss) {
    $vals = array();

    if (isset($st_choices[$st]) && isset($st_choices[$st][$ss])) {
        $vals['a1'] = $st_choices[$st]["a1"];
        $vals['a2'] = $st_choices[$st]["a2"];
        $vals['key1'] = $vals[$st][$ss]['key1'];
    }
}

Durumunuza bağlı olarak, ayrıca) (isset bu atamaları kaydırmak gerekebilir.