簡體   English   中英

如何簡化此PHP腳本?

[英]How can I simplify this PHP script?

我想將“ selected”屬性添加到組合框。 這是我的PHP:

if($results['status'] == 1)
{ $ok1= "selected"; }
else
{ $ok1= ""; }

if($results['status'] == 2)
{ $ok2= "selected"; }
else
{ $ok2= ""; }

if($results['status'] == 3)
{ $ok3= "selected"; }
else
{ $ok3= ""; }

if($results['status'] == 4)
{ $ok4= "selected"; }
else
{ $ok4= ""; }

我可能有數百個IF。

我已經嘗試過了,但是似乎沒有用:

for($a=1; $a<=4; $a++){
    if($results['status'] == $a)
    { $ok = "selected"; }
    else
    { $ok = ""; }

}

我想使其盡可能簡單。 也許是1或2行。 因為我有很多組合框應該用這種方式處理

編輯(我的組合框):

<select>
<option value="1" <?php echo $ok1; ?>>A</option>
<option value="2" <?php echo $ok2; ?>>B</option>
<option value="3" <?php echo $ok3; ?>>C</option>
<option value="4" <?php echo $ok4; ?>>D</option>
</select>

你可以這樣

<?php

// status list array
$selectValues = array(1, 2, 3, 4);

echo '<select name="combo_name">';
foreach($selectValues  as $value){
    $selected = "";
    if($results['status'] == $value){
        $selected = ' selected="selected" ';
    }
    echo '<option '.$selected.' value="'.$value.'">'.$value.'</option>';
}
echo '</select>';  

?>

由於$results['status']只能有1個值,因此請使用動態變量名稱來簡化生活!

// initialize all 4 to blank
for($a=1; $a<=4; $a++){
    ${"ok" . $a} = "";
}
// set the one that is selected 
${"ok" . $results['status']} = "selected";

這個答案具有很好的可擴展性,您只需將“ for”行上的數字從4更改為1000,即可使用,而無需添加任何額外的代碼。

您要做的就是創建一個數組並遍歷整個數組-

<?php    
    $results_status = 3; // What ever your retrieve variable value is. In your case: `$results['status']`     
    $arr = array("1" => "A", 
                 "2" => "B", 
                 "3" => "C", 
                 "4" => "D"
                );
    ?>
    <select>
    <?php
    foreach($arr as $key => $val){
        $sel = ($results_status == $key) ? "selected='selected'" : "";
        ?>
        <option value="<?php echo $key?>" <?php echo $sel; ?>><?php echo $val?></option>
<?php }?>
</select>

您需要每次在組合框中檢查選定的值。

希望這可以幫助

$ combolength-組合選項的數量

$ok = array_fill(0, $combolength - 1, '');
switch ($results['status']) {
    case $results['status']:
        $ok[$results['status']]= 'selected';
        break;
} 

我個人認為“簡化”您已經擁有的不是解決此問題的方法。 如果您不使用框架,我想您應該問問如何使腳本可重用 ,尤其是因為您說“我有很多組合框都應該用這種方式處理”。 從硬編碼的角度來看,不像函數/方法那樣使用包含的元素聽起來像很多額外的工作。 我個人將創建一個類,該類可以使表單字段標准化,並可以將數組與動態鍵/值數組一起輸入。 簡單的例子:

/core/classes/Form.php

class Form
    {
        # The idea here is that you would have many methods to build form fields

        # You can edit this as you please
        public function select($settings)
            {
                $class      =   (!empty($settings['class']))? ' class="'.$settings['class'].'"':'';
                $id         =   (!empty($settings['id']))? ' id="'.$settings['id'].'"':'';
                $selected   =   (!empty($settings['selected']))? $settings['selected']:false;
                $other      =   (!empty($settings['other']))? ' '.implode(' ',$settings['other']):'';
                ob_start();
            ?>
<select name="<?php echo $settings['name']; ?>"<?php echo $other.$id.$class; ?>>
    <?php foreach($settings['options'] as $key => $value) { ?>
    <option value="<?php echo $key; ?>"<?php if($selected == $key) echo ' selected'; ?>><?php echo $value; ?></option>
    <?php } ?>
</select>
            <?php
                $data = ob_get_contents();
                ob_end_clean();
                return $data;
            }
    }

使用方法:

# Include the class
require_once(__DIR__.'/core/classes/Form.php');
# You can use $form = new Form(); echo $form->select(...etc.
# but I am just doing this way for demonstration
echo (new Form())->select(array(
    'name'=>'status',
    'class'=>'classes here',
    'id'=>'select1',
    'other'=>array(
        'data-instructions=\'{"stuff":["things"]}\'',
        'onchange="this.style.borderColor=\'red\';this.style.fontSize=\'30px\'"'
    ),
    # Options can be assign database returned arrays
    'options'=>array(
        '_'=>'Select',
        1=>'A',
        2=>'B',
        3=>'C',
        4=>'D'
    ),
    'selected'=>((!empty($results['status']))? $results['status'] : '_')
    ));

給你:

<select name="status" data-instructions='{"stuff":["things"]}' onchange="this.style.borderColor='red';this.style.fontSize='30px'" id="select1" class="classes here">
    <option value="_">Select</option>
    <option value="1">A</option>
    <option value="2">B</option>
    <option value="3">C</option>
    <option value="4">D</option>
</select>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM