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


Check if any comma seperated value exists inside loop values

我从客户端的旧数据库中获取一些值,如下所示:

$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>';
        }
    }
}

只需使用 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>';                 
}

解释:例如,如果$selected = "3,4"那么explode(",",$selected)返回array(3,4)in_array检查该数组中是否存在$obj["rowid"]',这意味着您将输出多个带有属性selected集的<options