检查循环值中是否存在任何逗号分隔值

时间:2016-01-14 08:22:19

标签: php arrays loops foreach

我从客户端的旧数据库中获取了一些值:

$query = "SELECT rowid,source FROM `".$table."`";
$result = mysql_query($query);$temp=0;$p = array();
while ($row = mysql_fetch_array($result)) {$p[$temp] = $row;$temp++;}

然后我循环遍历这些值:

// loop through all possible values
foreach ($p as $obj) {

}

在foreach循环中,我将打印<option>元素,我想确定<option selected/>元素。所选元素可能超过1,因为它是多选形式。

我首先检查$selected值是否等于rowid。

// check if exists equals to rowid
if ($obj["rowid"] == $selected){
   $return .= '<option value="'.$obj["rowid"].'" selected>'.$obj["source"].'</option>';
}else{
   $return .= '<option value="'.$obj["rowid"].'">'.$obj["source"].'</option>';                 
}

这可以找到$selected = "1"(或任何单个数字)

我的问题和问题来自$selected = "3,4"。然后我需要循环遍历值并分离 foreach中的逗号分隔值?

这是我的完整代码:

$selected = "3,4";
$query = "SELECT rowid,source FROM `" . $table . "`";
$result = mysql_query($query);
$temp = 0;
$p = array();
while ($row = mysql_fetch_array($result)) {
    $p[$temp] = $row;
    $temp++;
}

// loop through all possible values
foreach($p as $obj) {
    // check if exists equals to rowid
    if ($obj["rowid"] == $selected) {
        $return.= '<option value="' . $obj["rowid"] . '" selected>' . $obj["source"] . '</option>';
    }
    else {

        // check if default exists with comma separated values
        if (!empty($default) && strpos($selected, ',') !== false) {
            $arr_values = explode(',', $selected);

            // loop through comma-separated values to get the selected items
            foreach($arr_values as $selected) {
                if ($obj["rowid"] == $default) {
                    $return.= '<option value="' . $obj["rowid"] . '" selected>' . $obj["source"] . '</option>';
                }
            }

            // $return .= '<option value="'.$obj["rowid"].'">'.$obj["source"].'</option>';
        }
        else {
            $return.= '<option value="' . $obj["rowid"] . '">' . $obj["source"] . '</option>';
        }
    }
}

1 个答案:

答案 0 :(得分:3)

只需使用in_array() + explode()个功能组合来检查rowid字符串中是否存在selected

if (in_array ($obj["rowid"], explode(",",$selected))){
      $return .= '<option value="'.$obj["rowid"].'" selected>'.$obj["source"].'</option>';
}else{
      $return .= '<option   value="'.$obj["rowid"].'">'.$obj["source"].'</option>';                 
}

说明: E.G.如果$selected = "3,4"然后explode(",",$selected)返回array(3,4)in_array检查该数组中是否存在$obj["rowid"],那么这意味着您将输出多个{{1}设置了属性<options