显示多个阵列数据

时间:2014-05-03 10:02:45

标签: php codeigniter

我在选择框中显示用户列表。有两种类型的用户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对象包含非选定/总用户数

3 个答案:

答案 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。我只是将条件置于选择框下,如果用户是nos​​elect然后显示选中。请检查图像是否循环

enter image description here

答案 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)

根据我的阅读方式,他会显示所有用户并在多个选择框中突出显示所选用户。他有多个选定的用户,因此您无法将阵列合并在一起。您必须将表中的每个用户与每个选定的用户进行比较,然后决定是否需要突出显示该用户。