Отображение данных нескольких массивов
Я отображаю список пользователей в поле выбора. Существует два типа пользователей, т.е. выбранные пользователи и не выбранные пользователи. Значения этих пользователей поступают из базы данных в двух массивах, т.е. один массив содержит запись выбранных пользователей, а другой массив содержит все записи пользователей. Теперь я хочу, чтобы при загрузке страницы выбранная запись пользователя отображалась как выбранная в поле выбора, а невыбранные пользователи отображаются как невыбранные. Вот мой код:
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 миллионов способов сделать что-то одно, но только один способ подходит именно вам. И это зависит от вас, чтобы найти этот путь.