我在选择框中显示用户列表。有两种类型的用户i-e选择用户和非选定用户。这些用户的值来自两个数组中的数据库i-e一个数组包含选定的用户记录,另一个数组包含所有用户记录。现在我想如果页面加载选定的用户记录应该在选择框中显示为选中,未选择的用户将显示为未选中。这是我的代码:
if ($selected != false ){
foreach ($selected as $select)
{}
foreach ($data as $rows) { echo $rows->id."<br />"; echo $select->id; ?>
<option value="<?php echo $rows->id; ?>" <?php if ($rows->id == $select->id) echo "selected";?>><?php echo $rows->username; ?></option>
<?php } } else{
foreach ($data as $rows) ?>
<option value="<?php echo $rows->id; ?>" <?php if ($rows->id == $select->id) ?>><?php echo $rows->username; ?></option>
<?php } ?>
$ selected对象包含所选用户列表,$ data对象包含非选定/总用户数
答案 0 :(得分:0)
如果我没错,你有两个像
这样的数组$ arr1 = array(array('id'=&gt; 1,“name”=&gt;'abc1',“user”=&gt;'select'),array('id'=&gt; 2,“名 “=&GT; 'ABC2',” 用户 “=&GT; '选择'),阵列( 'ID'=→3,” 姓名 “=&GT; 'ABC3',” 用户“=&GT; '选择') ,阵列( 'ID'=→4, “姓名”=&GT; 'abc4', “用户”=&GT; '选择'),阵列( 'ID'=大于5, “姓名”=&GT;'ABC5 ”, “用户”=&GT; '选择'),阵列( 'ID'=→6, “姓名”=&GT; 'abc6', “用户”=&GT; '选择'),阵列( 'ID'=大于7, “姓名”=&GT; 'ABC7', “用户”=&GT; '选择'));
$ arr2 = array(array('id'=&gt; 8,“name”=&gt;'abc8',“user”=&gt;'noselect'),array('id'=&gt; 9,“名 “=&GT; 'abc9',” 用户 “=&GT; 'noselect'),阵列( 'ID'=大于10,” 姓名 “=&GT; 'abc10',” 用户“=&GT; 'noselect') ,阵列( 'ID'=&GT; 11, “姓名”=&GT; 'abc11', “用户”=&GT; 'noselect'),阵列( 'ID'=&GT; 12, “姓名”=&GT;'ABC12 ”, “用户”=&GT; 'noselect'),阵列( 'ID'=&GT; 13, “姓名”=&GT; 'abc13', “用户”=&GT; 'noselect'),阵列( 'ID'= &GT; 14, “姓名”=&GT; 'abc14', “用户”=&GT; 'noselect'));
$ arraymerege = array_merge($ arr1,$ arr2); //将数组合并为一个
查看显示用户所选的html。我只是将条件置于选择框下,如果用户是noselect然后显示选中。请检查图像是否循环
答案 1 :(得分:0)
在你真正进入循环之前,你正在关闭你的第一个foreach ...试试这个。 (用一点点短代码重写)
<select name="users" type="multiple">
<?php
//no need to write $selected == false,
//this is the same, a ! will compare this var to false
//also i use : instead because its much nicer to read i.m.o
//its also a little easier to tell the difference from a closing
//if and foreach this way if you have a lot of nested comparisons.
if (!$selected) :
//you want to loop through all rows first.
foreach ($data as $rows) :
//now look at each selected user per user
foreach ($selected as $select) : ?>
//here is where you make the comparison. no need for any other loops
//this is called a turnary comparison. its basically short code for
//if(blah) else this;
//read up on it here:
// http://www.php.net/manual/en/language.operators.comparison.php
//the <?= is the same as <?php echo. This does require for you to have
//short codes turned on in your main php.ini. It usually is though.
<option value="<?= $rows->id; ?>
<?= (($rows->id == $select->id) ? 'selected' :''); ?>
<?= $rows->username; ?>
</option>
endforeach;
endif;
?>
</select>
这是您需要的所有代码。你应该只需要两个循环。第一个循环将遍历每个用户,然后嵌套循环将每个用户与每个选定用户进行比较。此外,编写更清晰的代码的能力需要计划。在你开始编写代码之前,我建议你投资白板或记事本来绘制流程图,图表等。你会得到一个基本的图片。总有1亿种方法可以做一件事,但只有一种方法适合你。你可以找到那种方式。
答案 2 :(得分:0)
根据我的阅读方式,他会显示所有用户并在多个选择框中突出显示所选用户。他有多个选定的用户,因此您无法将阵列合并在一起。您必须将表中的每个用户与每个选定的用户进行比较,然后决定是否需要突出显示该用户。