用于选择元素的PHP函数-显示不存在的值
我在PHP中创建了这个函数,用于在select元素中显示值用于选择元素的PHP函数-显示不存在的值,php,Php,我在PHP中创建了这个函数,用于在select元素中显示值 if(!function_exists("StatusSelect")) { function StatusSelect($selected = array(), $type, $behaviour = '') { global $mysqli; $val = ''; $ret = ''; $list = Statuses($type, $behaviour);
if(!function_exists("StatusSelect")) {
function StatusSelect($selected = array(), $type, $behaviour = '') {
global $mysqli;
$val = '';
$ret = '';
$list = Statuses($type, $behaviour);
foreach($list["results"] as $item) {
$ret.= '<option value="'.$item["name"].'"';
if(in_array($item["name"], $selected) or $item["default"] == 'Y') {
$ret.= ' selected="selected"';
}
$ret.= '>'.($item["display"] ? $item["display"] : $item["name"]).'</option>';
}
return $ret;
}
}
它工作正常,并将正确的值作为selected
,但是如果它不再存在于循环中,而是包含在$selected
数组中,我需要一种方法来仍然显示一个值
例如,如果我有以下值:
1
2
3
4
调用status
函数时在我的循环中返回的
并且5
的值在$selected
数组中
我希望元素看起来像:
<select name="status" class="form-control required">
<option value="5" selected>5</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
您可以将函数
状态($type,$behavior)
更改为以下内容:
function Statuses($type, $behavior='', $selected = null) {
global $conn;
$results=array();
$sql="SELECT * from statuses where type = '".$type."' ";
if($behavior != '') {
$sql.="and behavior = '".$behavior."' ";
}
$sql.="ORDER by list_order, name ASC ";
$rs=mysql_query($sql,$conn);
while($result=mysql_fetch_array($rs)) {
$results[] = $result;
}
if (null !== $selected && is_array($selected)) {
foreach($selected as $val) {
$results[] = array('name' => $val, 'default' => 'N', 'display' => $val);
}
}
return array("results" => $results);
}
function StatusSelect($selected = array(), $type, $behaviour = '') {
global $mysqli;
$val = '';
$ret = '';
$list = Statuses($type, $behaviour);
$found = false;
foreach($list["results"] as $item) {
$ret.= '<option value="'.$item["name"].'"';
if(in_array($item["name"], $selected) or $item["default"] == 'Y') {
$found = true;
$ret.= ' selected="selected"';
}
$ret.= '>'.($item["display"] ? $item["display"] : $item["name"]).'</option>';
}
if (!$found) {
foreach($selected as $val) {
$ret = '<option value="' . $val . '" selected="selected">' . $val . '</option>' . $ret;
}
}
return $ret;
}
或者,您可以更改状态选择()
,如下所示:
function Statuses($type, $behavior='', $selected = null) {
global $conn;
$results=array();
$sql="SELECT * from statuses where type = '".$type."' ";
if($behavior != '') {
$sql.="and behavior = '".$behavior."' ";
}
$sql.="ORDER by list_order, name ASC ";
$rs=mysql_query($sql,$conn);
while($result=mysql_fetch_array($rs)) {
$results[] = $result;
}
if (null !== $selected && is_array($selected)) {
foreach($selected as $val) {
$results[] = array('name' => $val, 'default' => 'N', 'display' => $val);
}
}
return array("results" => $results);
}
function StatusSelect($selected = array(), $type, $behaviour = '') {
global $mysqli;
$val = '';
$ret = '';
$list = Statuses($type, $behaviour);
$found = false;
foreach($list["results"] as $item) {
$ret.= '<option value="'.$item["name"].'"';
if(in_array($item["name"], $selected) or $item["default"] == 'Y') {
$found = true;
$ret.= ' selected="selected"';
}
$ret.= '>'.($item["display"] ? $item["display"] : $item["name"]).'</option>';
}
if (!$found) {
foreach($selected as $val) {
$ret = '<option value="' . $val . '" selected="selected">' . $val . '</option>' . $ret;
}
}
return $ret;
}
函数状态选择($selected=array(),$type,$behavior=''){
全球$mysqli;
$val='';
$ret='';
$list=状态($type,$behavior);
$found=false;
foreach($list[“results”]作为$item){
$ret.=''($item[“display”]?$item[“display”]:$item[“name”])。';
}
如果(!$found){
foreach($选择为$val){
$ret='.$val'.$ret;
}
}
返回$ret;
}
=)。产出:
<option value="5" selected="selected">5</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
5
1.
2.
3.
4.
您可以将功能状态($type,$behavior)更改为以下内容:
function Statuses($type, $behavior='', $selected = null) {
global $conn;
$results=array();
$sql="SELECT * from statuses where type = '".$type."' ";
if($behavior != '') {
$sql.="and behavior = '".$behavior."' ";
}
$sql.="ORDER by list_order, name ASC ";
$rs=mysql_query($sql,$conn);
while($result=mysql_fetch_array($rs)) {
$results[] = $result;
}
if (null !== $selected && is_array($selected)) {
foreach($selected as $val) {
$results[] = array('name' => $val, 'default' => 'N', 'display' => $val);
}
}
return array("results" => $results);
}
function StatusSelect($selected = array(), $type, $behaviour = '') {
global $mysqli;
$val = '';
$ret = '';
$list = Statuses($type, $behaviour);
$found = false;
foreach($list["results"] as $item) {
$ret.= '<option value="'.$item["name"].'"';
if(in_array($item["name"], $selected) or $item["default"] == 'Y') {
$found = true;
$ret.= ' selected="selected"';
}
$ret.= '>'.($item["display"] ? $item["display"] : $item["name"]).'</option>';
}
if (!$found) {
foreach($selected as $val) {
$ret = '<option value="' . $val . '" selected="selected">' . $val . '</option>' . $ret;
}
}
return $ret;
}
或者,您可以更改状态选择()
,如下所示:
function Statuses($type, $behavior='', $selected = null) {
global $conn;
$results=array();
$sql="SELECT * from statuses where type = '".$type."' ";
if($behavior != '') {
$sql.="and behavior = '".$behavior."' ";
}
$sql.="ORDER by list_order, name ASC ";
$rs=mysql_query($sql,$conn);
while($result=mysql_fetch_array($rs)) {
$results[] = $result;
}
if (null !== $selected && is_array($selected)) {
foreach($selected as $val) {
$results[] = array('name' => $val, 'default' => 'N', 'display' => $val);
}
}
return array("results" => $results);
}
function StatusSelect($selected = array(), $type, $behaviour = '') {
global $mysqli;
$val = '';
$ret = '';
$list = Statuses($type, $behaviour);
$found = false;
foreach($list["results"] as $item) {
$ret.= '<option value="'.$item["name"].'"';
if(in_array($item["name"], $selected) or $item["default"] == 'Y') {
$found = true;
$ret.= ' selected="selected"';
}
$ret.= '>'.($item["display"] ? $item["display"] : $item["name"]).'</option>';
}
if (!$found) {
foreach($selected as $val) {
$ret = '<option value="' . $val . '" selected="selected">' . $val . '</option>' . $ret;
}
}
return $ret;
}
函数状态选择($selected=array(),$type,$behavior=''){
全球$mysqli;
$val='';
$ret='';
$list=状态($type,$behavior);
$found=false;
foreach($list[“results”]作为$item){
$ret.=''($item[“display”]?$item[“display”]:$item[“name”])。';
}
如果(!$found){
foreach($选择为$val){
$ret='.$val'.$ret;
}
}
返回$ret;
}
=)。产出:
<option value="5" selected="selected">5</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
5
1.
2.
3.
4.
我建议创建一个中间函数,用$selected
中的值更新$list
,然后将其发送到生成html:
<?php
function Statuses($type, $behaviour) {
// just return some static data:
return array(
"results" =>
array(
array("name" => "1", "default" => "N"),
array("name" => "2", "default" => "N"),
array("name" => "3", "default" => "N"),
array("name" => "4", "default" => "N"),
),
);
}
// read Statuses() and update with synthetic values from $selected
function StatusesWithSelected($type, $behaviour, $selected) {
$statuses = Statuses($type, $behaviour);
$newStatuses = array_diff($selected, array_map(function($x){return $x["name"];}, $statuses["results"]));
foreach ($newStatuses as $s){
$statuses["results"][] = array(
"name" => $s,
"default" => "Y",
);
}
return $statuses;
}
if(!function_exists("StatusSelect")) {
function StatusSelect($selected = array(), $type, $behaviour = '') {
global $mysqli;
$val = '';
$ret = '';
$list = StatusesWithSelected($type, $behaviour, $selected);
foreach($list["results"] as $item) {
$ret.= '<option value="'.$item["name"].'"';
if($item["default"] == 'Y') {
$ret.= ' selected="selected"';
}
$ret.= '>'.(isset($item["display"]) ? $item["display"] : $item["name"]).'</option>'; // I added isset here to prevent Notices
}
return $ret;
}
}
echo StatusSelect(array('4', '5'), "test");
我建议创建一个中间函数,用$selected
中的值更新$list
,然后将其发送到生成html:
<?php
function Statuses($type, $behaviour) {
// just return some static data:
return array(
"results" =>
array(
array("name" => "1", "default" => "N"),
array("name" => "2", "default" => "N"),
array("name" => "3", "default" => "N"),
array("name" => "4", "default" => "N"),
),
);
}
// read Statuses() and update with synthetic values from $selected
function StatusesWithSelected($type, $behaviour, $selected) {
$statuses = Statuses($type, $behaviour);
$newStatuses = array_diff($selected, array_map(function($x){return $x["name"];}, $statuses["results"]));
foreach ($newStatuses as $s){
$statuses["results"][] = array(
"name" => $s,
"default" => "Y",
);
}
return $statuses;
}
if(!function_exists("StatusSelect")) {
function StatusSelect($selected = array(), $type, $behaviour = '') {
global $mysqli;
$val = '';
$ret = '';
$list = StatusesWithSelected($type, $behaviour, $selected);
foreach($list["results"] as $item) {
$ret.= '<option value="'.$item["name"].'"';
if($item["default"] == 'Y') {
$ret.= ' selected="selected"';
}
$ret.= '>'.(isset($item["display"]) ? $item["display"] : $item["name"]).'</option>'; // I added isset here to prevent Notices
}
return $ret;
}
}
echo StatusSelect(array('4', '5'), "test");
你能展示一个它应该是什么样子和现在是什么样子的例子吗?你能展示你的状态()
?你想看到的函数吗?是的,函数的主体当然,请再次查看更新。你能展示一个它应该是什么样子和现在是什么样子的例子吗?你能展示你的状态()吗
?要查看的函数?是的,函数的主体确定,请参阅更新again@charlie,顺便问一下,您的$selected
数组是否可以包含多个元素?@charlie,顺便问一下,您的$selected
数组是否可以包含多个元素?