Отображение данных нескольких массивов

Я отображаю список пользователей в поле выбора. Существует два типа пользователей, т.е. выбранные пользователи и не выбранные пользователи. Значения этих пользователей поступают из базы данных в двух массивах, т.е. один массив содержит запись выбранных пользователей, а другой массив содержит все записи пользователей. Теперь я хочу, чтобы при загрузке страницы выбранная запись пользователя отображалась как выбранная в поле выбора, а невыбранные пользователи отображаются как невыбранные. Вот мой код:

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 ответа

Из того, как я прочитал вопрос, он показывает всех пользователей и выделяет выбранных в окне множественного выбора. У него есть несколько выбранных пользователей, поэтому вы не можете объединить массивы вместе. Вам нужно будет сравнить каждого пользователя в таблице с каждым выбранным пользователем, а затем решить, нужно ли выделять этого пользователя или нет.

Если я не ошибаюсь, у вас есть два массива, как

$arr1 = array(array('id'=>1,"name"=>'abc1',"user"=>'select'), массив ('id'=>2,"name"=>'abc2',"пользователь" => 'выберите'), массив ('ID'=>3,"название" => 'ABC3',"пользователь" => 'выберите'), массив ('ID'=>4,"имя "=>'abc4'," пользователь "=> 'выберите'), массив ('ID'=>5," название "=>'abc5'," пользователь "=> 'выбрать'), массив ('идентификатор'=>6,"название"=>'abc6',"пользователь" => 'выберите'), массив ('ID'=>7,"название"=>'abc7',"пользователь" => 'выберите'));

$ arr2 = array (array ('id' => 8, "name" => 'abc8', "user" => 'noselect'), array ('id' => 9, "name" => 'abc9', "пользователь" => 'Noselect'), массив ('идентификатор'=>10,"название"=>'abc10',"пользователь" => 'Noselect'), массив ('идентификатор' => 11, "имя "=> 'abc11'," пользователь "=> 'Noselect'), массив ('идентификатор'=>12," название "=>'abc12'," пользователь "=> 'Noselect'), массив ('ID'=>13,"название"=>'abc13',"пользователь" => 'Noselect'), массив ('идентификатор'=>14,"название"=>'abc14',"пользователь" => 'Noselect'));

$ arraymerege = array_merge ($ arr1, $ arr2); // Объединяем массив в один

посмотрите html, в котором отображается выбранный пользователем. я просто помещу условие в поле выбора, если пользователь использует выделение, тогда оно показывает выбранное. Пожалуйста, проверьте изображение для цикла

Вы закрываете свой первый 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>

Это весь код, который вам нужен. Вам нужно только две петли. Самый первый цикл будет проходить через каждого пользователя, а вложенный цикл будет сравнивать каждого из этих пользователей с каждым выбранным пользователем. Кроме того, умение писать более чистый код требует планирования. Я бы предложил инвестировать в доску или блокнот, чтобы рисовать блок-схемы, диаграммы и т. Д., Прежде чем вы начнете писать код. Вы получите базовую картину в вашей голове. Всегда есть 100 миллионов способов сделать что-то одно, но только один способ подходит именно вам. И это зависит от вас, чтобы найти этот путь.

Другие вопросы по тегам