Вывод записей через foreach

299
06 октября 2017, 18:41

Хочу вывести записи в два блока list-group (если запись с id_user == 1 то в один блок вносить, а если id_user == 3 то в другой ). Но они выводятся каждая запись отдельно. Что я делаю не так?

stdClass Object 
( 
    [tasks] => Задача 1 
    [id_user] => 3 
) 
     
    stdClass Object 
( 
    [tasks] => Задача 2 
    [id_user] => 3 
) 
     
    stdClass Object 
( 
    [tasks] => Задача 3 
    [id_user] => 3 
) 
     
    stdClass Object 
( 
    [tasks] => Задача 4 
    [id_user] => 3 
) 
     
    stdClass Object 
( 
    [tasks] => Задача 1 
    [id_user] => 1 
) 
     
    stdClass Object 
( 
    [tasks] => Задача 2 
    [id_user] => 1 
)

foreach($data['getTask'] as $Tasks){ //print_r($Tasks); 
    if($Tasks->id_user == 1){ ?> 
        <div class="list-group"> 
          <li class="list-group-item active">M</li> 
          <li class="list-group-item"><?php echo $Tasks->tasks ?></li> 
        </div>  
    <?php } 
    if($Tasks->id_user == 3){ ?> 
        <div class="list-group"> 
          <li class="list-group-item active">P</li> 
          <li class="list-group-item"><?php echo $Tasks->tasks ?></li> 
        </div>   
    <?php } 
}

Нужно вот так, что бы было все в кучке.

Answer 1

Если опустить тот факт, что а данном моем ответе написан говнокод, ибо я в принципе не приемлю вывод html непосредственно в php, то решение задачи представляется следующим.

Допустим вы взяли данные из json (ну или еще откуда то, что получили stdClass):

$json_data = '[{"tasks":"Задача 1","id_user":3},
               {"tasks":"Задача 2","id_user":3},
               {"tasks":"Задача 3","id_user":3},
               {"tasks":"Задача 4","id_user":3},
               {"tasks":"Задача 1","id_user":1},
              {"tasks":"Задача 2","id_user":1}]';
$data = json_decode($json_data);

Теперь вы хотите разделить задачи на группы по пользователям. Для этого сначала определите уникальные идентификаторы пользователей:

$uids = array_unique( array_map(function($item){ return $item->id_user; }, $data));
sort($uids);

Заметьте, что если бы у вас был не массив stdClass, а просто вложенные массивы, то можно было бы обойтись array_unique(array_column($data, 'id_user')). Если же вы все таки десериализовали данные из json, то второй булевый-парамер овтечает за преобразование объектов в массивы, а не классы, т.е. json_decode($json_data, true) даст двух-уровневый массив, а не массив объектов.

ну а теперь говнокод:

foreach($uids as $uId){ ?>
    <div class="list-group">
      <li class="list-group-item active">user: <?= $uId ?></li>
    <?
    foreach($data as $d){
        if($d->id_user != $uId) continue;
        ?>
        <li class="list-group-item"><?= $d->tasks ?></li>
        <?
    }?>
    </div>
    <?
}

Этот код генерирует следующую разметку

<div class="list-group">
   <li class="list-group-item active">user: 1</li>
   <li class="list-group-item">Задача 1</li>
   <li class="list-group-item">Задача 2</li>
</div>
<div class="list-group">
    <li class="list-group-item active">user: 3</li>
    <li class="list-group-item">Задача 1</li>
    <li class="list-group-item">Задача 2</li>
    <li class="list-group-item">Задача 3</li>
    <li class="list-group-item">Задача 4</li>
</div>
READ ALSO
не сохраняется сессия в yii2

не сохраняется сессия в yii2

Не работает логин в Yii2 - после каждого запроса создаётся новая сессия

162
Разбить строку не удаляя разделители

Разбить строку не удаляя разделители

Добрый деньНужно разбить строку на массив при этом сохранить разделитель Как такое реализовать с explode еще не знаю

215
AJAX-запрос и случайный ID-кнопки [требует правки]

AJAX-запрос и случайный ID-кнопки [требует правки]

Доброе время суток! Имеется сайт, не мойПроблема следующая: при нажатии на кнопку, отправляется AJAX-запрос, на сервер

185
Woocommerce Ajax hook при нажатии на

Woocommerce Ajax hook при нажатии на

Помогите решить вопросПишу плагин, мне нужно чтобы при нажатии на radio button вставлялся хук без перезагрузки страницы, тоесть мне нужно вывести...

164