2016-04-01 5 views
0

Ich habe eine IF-Anweisung, um nach einer bestimmten Zeichenfolge innerhalb einer ForEach-Schleife zu suchen und falls vorhanden, dann 'ausgewählt' zur Ausgabe <option>, so dass der Eintrag zuerst innerhalb eines HTML angezeigt wird Wählen Sie das Feld aus. Wenn die Schleife jedoch den richtigen Datensatz erreicht, fügt sie jeden nachfolgenden Datensatz <option> hinzu.PHP: IF-Anweisung in ForEach-Schleife für nachfolgende Einträge

function adminFillOption($options, $input) { 
$output = ""; 
$selected = ""; 
//iterate through the array 
foreach ($options as $value => $desc) { 
    if ($input == $desc) { 
     $selected = 'selected'; 
    }; 
    //Add an option for each elemement of the array to the output 
    $desc = htmlspecialchars($desc); 
    $output .= "\t\t\t\t\t\t<option value='$desc' $selected >$desc</option>\n"; 

}//end interation 
return $output; 
} 

Jede Hilfe würde sehr geschätzt werden.

+1

zurückgesetzt werden nur $ ausgewählt = ‚‘ hinzufügen; vor wenn Aussage. – Indrajit

+0

Wenn Sie die Dinge für Endbenutzer beschleunigen wollen, vermeiden Sie es, '\ t' hinzuzufügen - Whitespaces sind für uns Menschen nur cool :) – hummingBird

Antwort

0

Sie werden es nie deaktivieren, damit es für jede Iteration gesetzt wird.

Versuchen Sie, den ternären Operator zu verwenden, um ihn auf Null zu setzen, wenn die Bedingung nicht erfüllt ist.

$selected = ($input == $desc) ? 'selected' : ''; 

oder alternativ $selected in der Schleife erklären, bevor die if entweder funktionieren würde.

So würde Code werden:

function adminFillOption($options, $input) { 
$output = ""; 
//iterate through the array 
foreach ($options as $value => $desc) { 
    $selected = ($input == $desc) ? 'selected' : ''; 
    //Add an option for each elemement of the array to the output 
    $desc = htmlspecialchars($desc); 
    $output .= "\t\t\t\t\t\t<option value='$desc' $selected >$desc</option>\n"; 

}//end interation 
return $output; 
} 

Demo: https://eval.in/546236

+0

Das funktioniert perfekt. Danke für die Antwort und die Information – AliP

0
function adminFillOption($options, $input) { 
    $output = ""; 
    foreach ($options as $value => $desc) { 
     //Add an option for each elemement of the array to the output 
     $desc = htmlspecialchars($desc); 
     $output .= "\t\t\t\t\t\t<option value='$desc'"; 
     if ($input == $desc) $output .= ' selected'; 
     $output .= ">$desc</option>\n"; 
    }//end interation 
    return $output; 
} 
0

Sie müssen überprüfen, ob $input$desc Array ist mit in_array:

<?php 
$options = array(1,2,3,4,5); 
$input = 3; 
function adminFillOption($options, $input) { 
    $output = ""; 

    foreach ($options as $value => $desc) { 
    if (in_array($input, array($desc)) == true) { 
     //continue;  
     $selected = 'selected';  
    }elseif(in_array($input, array($desc))==false){ 
     $selected = ''; 
    } 
     $desc = htmlspecialchars($desc);  
     $output .= "\t\t\t\t\t\t<option value='$desc' $selected >$desc</option>\n";  

    } 

    return $output; 
} 
echo adminFillOption($options, $input); 

Siehe Demo here Und ich denke, meine Antwort schneller ausführt. Die angenommene Antwort wird in 0,020 Sek. Ausgeführt und meins macht in 0,0080 Sek.

0

Sein, weil Sie nur Wert auf $selected einmal zuweisen (wenn es eine ausgewählt ist).

Und nachdem der ausgewählte erreicht ist, wird die Variable nicht geändert.

ändern

if ($input == $desc) { 
$selected = 'selected'; 
}; 

An:

if ($input == $desc) { 
$selected = 'selected'; 
} 
else { 
$selected = ''; 
} 

oder sogar Folgende Optionen sind besser:

$selected = ''; 
if ($input == $desc) { 
$selected = 'selected'; 
} 

Ternary Betreiber:

$selected = ($input == $desc) ? 'selected' : ''; 
0
function adminFillOption($options, $input) { 
$output = ""; 
// $selected = ""; -----> not here 
//iterate through the array 
foreach ($options as $value => $desc) { 
    $selected = ""; // ----> but here 
    if ($input == $desc) { 
     $selected = 'selected'; 
    }; 
    //Add an option for each elemement of the array to the output 
    $desc = htmlspecialchars($desc); 
    $output .= "\t\t\t\t\t\t<option value='$desc' $selected >$desc</option>\n"; 

}//end interation 
return $output; 
} 

Wenn Sie es wie zu tun, dass die $selected wird immer durch jede Iteration

Verwandte Themen