Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于选择元素的PHP函数-显示不存在的值_Php - Fatal编程技术网

用于选择元素的PHP函数-显示不存在的值

用于选择元素的PHP函数-显示不存在的值,php,Php,我在PHP中创建了这个函数,用于在select元素中显示值 if(!function_exists("StatusSelect")) { function StatusSelect($selected = array(), $type, $behaviour = '') { global $mysqli; $val = ''; $ret = ''; $list = Statuses($type, $behaviour);

我在PHP中创建了这个函数,用于在select元素中显示值

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
数组是否可以包含多个元素?