#php #arrays #object
#php #массивы #объект
Вопрос:
это упрощенный массив объектов с разными элементами (это результат из базы данных). Я пытаюсь сгруппировать классы вместе для каждого пользователя, чтобы я мог показать это в таблице html в качестве конечного результата, я использую это после цикла foreach:
echo'<td>'.$result->id_person.'</td>';
echo'<td>'.$result->id_class.'</td>';`
Я попытался проанализировать массив с помощью 2 циклов for и цикла if, но это сработало не так, как ожидалось. Пожалуйста, кто-нибудь может мне с этим помочь?
Я хотел бы сгруппировать id_class
для одного и того же человека
Array
(
[0] => stdClass Object
(
[id_person] => 1
[id_class] => 32
)
[1] => stdClass Object
(
[id_person] => 5
[id_class] => 32
)
[2] => stdClass Object
(
[id_person] => 7
[id_class] => 9
)
[3] => stdClass Object
(
[id_person] => 7
[id_class] => 40
)
Комментарии:
1. Пожалуйста, дайте нам пример вывода, который вы хотите увидеть
2. Массив уже отсортирован
id_person
? Я предполагаю, что из ПОРЯДКА ПО запросу?3. @RiggsFolly да, я использовал ORDER BY, и результат должен быть чем-то вроде [id_class] => 9, 40 но я знаю, что это невозможно, потому что каждый из них представляет собой целый объект
4. Итак, как выглядит код циклов, о которых вы упоминаете?
Ответ №1:
Простая проверка в цикле, как показано ниже, определит, что текущее событие относится к тому же человеку, что и последнее событие.
$id_person = null;
foreach($results as $result){
if ( $id_person == $result->id_person ) {
echo'<td>amp;nbsp;</td><td>'.$result->id_class.'</td>';`
} else {
echo'<td>'.$result->id_person.'</td><td>'.$result->id_class.'</td>';`
$id_person = $result->id_person;
}
}
Это должно привести к созданию такой таблицы.
1 32
5 32
7 9
40
Ответ №2:
С подсказкой RiggsFolly я также использовал $previous, чтобы сохранить предыдущий элемент в текущей итерации и сравнить, совпадает ли он, так что это работает:
//$res is an array of objects that I'm parsing
$id_person= null;
$tab = [];
$previous = [];
$len = count($res);
for($i = 0, $i<$len, $i ){
if($id_person== $res[$i]->id_person){
array_push($tab, ($res[$i]->id_class));
}else{
array_push($previous, $res[$i]->id_person);
echo'<tr><td >'.$res[(i-1)]->id_person.'</td><td >'.foreach($tab as $drawTab){ echo $drawTab; }.'</td></tr>';
$tab = array();
$tab = $res[$i]->id_class;
}
// check when it's the last element of the array :
if($i == ($len-1)){ ?>
<tr><td> <?php foreach($previous as $pre){echo $pre; } ?> </td>
<td> <?php foreach($array as $arr){echo $arr.'<br/>'; } ?> </td></tr>
<?php
}
}