listar status visto e não visto dentro do foreach php
Tenho uma aplicação em PHP que lista os dados do banco e me retorna o seguinte array.
Eu preciso fazer uma condicional nesse array para exibir os nomes que tem o visto = 1 aparecerem na cor verde e o proximo se for igual a 0 exibe na cor laranja, e o demais exibe na cor vermelha.
Digamos que o primeiro indice é Visto = 1, eu quero que ele fique verde e o proximo (indice 2) fique laranja, já os demais à partir do indice 3 fiquem vermelhos.
$extensivo = Array
(
0 => Array
(
'nome' => 'João',
'visto' => 1
),
1 => Array
(
'nome' => 'Lucas',
'visto' => 1
),
2 => Array
(
'nome' => 'Julia',
'visto' => 0
),
3 => Array
(
'nome' => 'Jose',
'visto' => 0
),
4 => Array
(
'nome' => 'Maria',
'visto' => 0
)
);Eu preciso fazer uma condicional nesse array para exibir os nomes que tem o visto = 1 aparecerem na cor verde e o proximo se for igual a 0 exibe na cor laranja, e o demais exibe na cor vermelha.
foreach ($extensivo as $details) {
if($details['visto'] == 1){
$details['nome'] = 'verde';
} else if($details['visto'] == 0){
$details['nome'] = 'vermelho';
} else if('AQUI A CONDIÇÃO PARA MOSTRAR VERMELHO OS PROXIMOS NOMES QUE FORE VISTO = 0'){
$details['nome'] = 'vermelho';
}
}Digamos que o primeiro indice é Visto = 1, eu quero que ele fique verde e o proximo (indice 2) fique laranja, já os demais à partir do indice 3 fiquem vermelhos.
Jose Damascena
Curtidas 0
Respostas
Emerson Nascimento
20/04/2021
tente algo assim:
$ultimo_visto = 0;
foreach ($extensivo as $details) {
if($details['visto'] == 1){
$details['nome'] = 'verde';
} else if($details['visto'] == 0 and $ultimo_visto = 1){
$details['nome'] = 'laranja';
} else {
$details['nome'] = 'vermelho';
}
$ultimo_visto = $details['visto'];
}GOSTEI 0
Jose Damascena
20/04/2021
Tenho uma aplicação em PHP que lista os dados do banco e me retorna o seguinte array.
Eu atualizei o codigo acima consegui fazer parte do que preciso, porém preciso separar por topicos. Preciso que aconteça o mesmo no topico 2 o que acontece no topico, exemplo:
1º - No topico 1 deve aparece o primeiro item como amarelo e os demais vermelhos;
2º - Ao setar o primeiro item como visto (visto = 1), preciso que o item dois fique amarelo e o item 1 fique verde, os demais fiquem vermelhos e assim sucessivamente;
================================= ATÉ AQUI ESTÁ OK ===============================
3º Ao setar o ultimo item do topico 1 (nesse caso o item 5 do array), preciso que o item 1 do topico 2 fique amarelo e os demais do topico 2 fiquem vermelhos e assim sucessivamente pois vão existir varios arrays desse tipo.
$extensivo = Array
(
0 => array(
0 => Array
(
'nome' => 'João',
'visto' => 0,
'topico' => 1
),
1 => Array
(
'nome' => 'Jose',
'visto' => 0,
'topico' => 1
),
2 => Array
(
'nome' => 'maria',
'visto' => 0,
'topico' => 1
),
3 => Array
(
'nome' => 'Fernando',
'visto' => 0,
'topico' => 1
),
4 => Array
(
'nome' => 'Marta',
'visto' => 0,
'topico' => 1
),
5 => Array
(
'nome' => 'Tiago',
'visto' => 0,
'topico' => 1
)
),
1 => array(
0 => Array
(
'nome' => 'Ricardo',
'visto' => 0,
'topico' => 2
),
1 => Array
(
'nome' => 'Henrique',
'visto' => 0,
'topico' => 2
),
2 => Array
(
'nome' => 'Tião',
'visto' => 0,
'topico' => 2
),
3 => Array
(
'nome' => 'Lucas',
'visto' => 0,
'topico' => 2
),
4 => Array
(
'nome' => 'Eduardo',
'visto' => 0,
'topico' => 2
),
5 => Array
(
'nome' => 'Ester',
'visto' => 0,
'topico' => 2
)
)
);
$flag_sucesso = false;
foreach ($extensivo as $details) {
foreach ($details as $valor) {
switch ($valor['visto']) {
case 1:
echo '<p class="text-success">' . $valor['nome'] . '</p>';
$flag_sucesso = true;
break;
case 0:
if ($flag_sucesso) {
echo '<p class="text-warning">' . $valor['nome'] . '</p>';
$flag_sucesso = false;
} else {
echo '<p class="text-danger">' . $valor['nome'] . '</p>';
}
break;
default:
echo '<p class="text-error">Visto ' . $valor['nome'] . ' desconhecido</p>';
}
}
}
Eu atualizei o codigo acima consegui fazer parte do que preciso, porém preciso separar por topicos. Preciso que aconteça o mesmo no topico 2 o que acontece no topico, exemplo:
1º - No topico 1 deve aparece o primeiro item como amarelo e os demais vermelhos;
2º - Ao setar o primeiro item como visto (visto = 1), preciso que o item dois fique amarelo e o item 1 fique verde, os demais fiquem vermelhos e assim sucessivamente;
================================= ATÉ AQUI ESTÁ OK ===============================
3º Ao setar o ultimo item do topico 1 (nesse caso o item 5 do array), preciso que o item 1 do topico 2 fique amarelo e os demais do topico 2 fiquem vermelhos e assim sucessivamente pois vão existir varios arrays desse tipo.
GOSTEI 0
Jose Damascena
20/04/2021
tente algo assim:
$ultimo_visto = 0;
foreach ($extensivo as $details) {
if($details['visto'] == 1){
$details['nome'] = 'verde';
} else if($details['visto'] == 0 and $ultimo_visto = 1){
$details['nome'] = 'laranja';
} else {
$details['nome'] = 'vermelho';
}
$ultimo_visto = $details['visto'];
}atualizei a questão você pode me ajudar?
GOSTEI 0