【问题标题】:Output results of my array is not as expected - php我的数组的输出结果不符合预期 - php
【发布时间】:2014-05-29 10:53:45
【问题描述】:

所以拿这个:

$status_choice = array();
$status_choice[] = "New Job";               
$status_choice[] = "Existing Case";

现在我使用它:

dropdown("Status:","status",$status_choice,"150px");

这基本上是一个输出 html 下拉列表的函数。但是,下拉列表中没有出现数组的那些值,而是如下所示:

这里是我的 dropdown() 函数:

function dropdown($title,$name,$possible_values,$width="300px",$desc="",$onchange="") {

    global $dropdown_allow_nulls;

    $current_value = $GLOBALS["row_$name"];
    if ($current_value == "") { $current_value = $GLOBALS["form_$name"]; }

    if (is_write_lock()) {
        return dropdown_readonly($title, $name, $possible_values, $width, $desc, $onchange);
    }

    $myonchange = "";

    //if ($onchange != "") { $myonchange = "onChange=\"set_control_changed(this); $onchange\""; } else { $myonchange = "onChange=\"set_control_changed(this);\""; }

    if ($GLOBALS["myclass"] != $GLOBALS["myclass1"]) { $GLOBALS["myclass"] = $GLOBALS["myclass1"]; } else { $GLOBALS["myclass"] = $GLOBALS["myclass2"]; }
    $myclass = $GLOBALS["myclass"];

    print "<tr class=\"$myclass\">\n";
    print "<td style=\"padding-right: 10px;\">$title</td>\n";
    print "<td style=\"padding-bottom: 2px; padding-top: 1px;\">\n";

    print "<select name=\"$name\" $myonchange style=\"width: $width;\" id=\"form_$name\">\n";

    if (is_array($possible_values)) {

        if ($dropdown_allow_nulls == 1) {

            $key = "";
            $value = "";
            if ($key == $current_value) { $selected = "selected"; } else { $selected = ""; }

            print "<option value=\"$key\" $selected>$value</option>\n";

        }

        foreach ($possible_values as $myrow) {

            $key = $myrow[0];
            $value = $myrow[1];
            if ($key == $current_value) { $selected = "selected"; } else { $selected = ""; }

            print "<option value=\"$key\" $selected>$value</option>\n";

        }

    } else {

        // sql query

        $myquery = sql_query($possible_values);
        print sql_error();

        if ($dropdown_allow_nulls == 1) {

            $key = "";
            $value = "";
            if ($key == $current_value) { $selected = "selected"; } else { $selected = ""; }

            print "<option value=\"$key\" $selected>$value</option>\n";

        }

        while ($myrow = sql_fetch_row($myquery)) {

            $key = $myrow[0];
            $value = $myrow[1];
            if ($key == $current_value) { $selected = "selected"; } else { $selected = ""; }

            print "<option value=\"$key\" $selected>$value</option>\n";

        }

    }

    print "</select>\n";

    if ($desc) {
        print "<span style=\"margin-left: 10px; color: #888888;\">$desc</span>\n";
    }

    print "</td>\n";
    print "</tr>\n";

} 

【问题讨论】:

  • 您期望在迭代$possible_values 的循环中为$key$value 获得什么值?事实上,$possible_values 中的每个元素都只是一个值。您是否使用自动递增数组索引作为您的$key

标签: php arrays output


【解决方案1】:
    foreach ($possible_values as $myrow) {

        $key = $myrow[0];
        $value = $myrow[1];

此时,$myrow 是一个字符串,首先是“New Job”,然后是“Existing Case”。因此,$key 被设置为NE,而$value 被设置为ex

用途:

foreach($possible_values as $key=>$value) {

改为。

【讨论】:

  • 现在我得到两个空的下拉值
【解决方案2】:

您的$myrow[1] 将获得$myrow 的第二个字符,要么将$value = $myrow[1] 更改为$value = $myrow,要么更改以下代码

foreach ($possible_values as $myrow) {

    $key = $myrow[0];
    $value = $myrow[1];
    if ($key == $current_value) { $selected = "selected"; } else { $selected = ""; }

    print "<option value=\"$key\" $selected>$value</option>\n";

}

下面试试

foreach ($possible_values as $key => $value) {
    $selected = $key == $current_value ? 'selected' : '';
    print "<option value=\"$key\" $selected>$value</option>\n";
}

【讨论】:

    【解决方案3】:

    您正在尝试获取值的字符数组。您需要获取主数组的键和值部分,而不是值(这会将其更改为字符数组)。更改以下行:

    ...
    foreach ($possible_values as $key=>$value) {
    
           // $key = $myrow[0];
           // $value = $myrow[1];
            if ($key == $current_value) { $selected = "selected"; } else { $selected = ""; }
    
            print "<option value=\"$key\" $selected>$value</option>\n";
    
        }
    ...
    

    【讨论】:

    • 你能解释一下你的答案吗?
    • 您正在尝试获取值的字符数组。您需要获取主数组的键和值部分,而不是值(这会将其更改为字符数组)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2021-10-04
    • 2016-03-07
    相关资源
    最近更新 更多