Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, meu problema é o seguinte... eu gostaria de ler as imagens que possuo no banco e lista-las em diferentes <div> de acordo com a categoria.
No banco a tabela está dessa forma:
tabela_imagem
id_foto
foto
id_categoria (foreign key)
e quando eu faço um select simples no banco elas aparecem assim:
1 | imagem_1 | categoria_1
2 | imagem_2 | categoria_2
3 | imagem_3 | categoria_3
4 | imagem_4 | categoria_1
5 | imagem_5 | categoria_1
e quero que aos lista-las fiquem assim:
<div class='categoria_1' > imagem_1, imagem_4, imagem_5 </div>
<div class='categoria_2' > imagem_2 </div>
<div class='categoria_3' > imagem_3 </div>
Estou usando:
do{
....
}while($row= mysqli_fetch_array($query));
e não consigo listar como desejo, pois como repete, a cada leitura são criadas novas <div> para cada imagem, ficando assim:
<div class='categoria_1' > imagem_1 </div>
<div class='categoria_2' > imagem_2 </div>
<div class='categoria_3' > imagem_3 </div>
<div class='categoria_1' > imagem_4 </div>
<div class='categoria_1' > imagem_5 </div>Também não sei se é a melhor maneira nem a mais eficiente.
Porem da pra fazer assim:
<?php
/*
+---+----------+------------+
| id| imagem | cat|
| 1 | imagem_1 | categoria_1|
| 2 | imagem_2 | categoria_2|
| 3 | imagem_3 | categoria_3|
| 4 | imagem_4 | categoria_1|
| 5 | imagem_5 | categoria_1|
+---+----------+------------+
*/
//Lista seria uma simulação do retorno do banco...
$lista = array(
array(
'id' => 5
,'imagem' => 'imagem_5'
,'cat' => 'categoria_1'
)
,array(
'id' => 1
,'imagem' => 'imagem_1'
,'cat' => 'categoria_1'
)
,array(
'id' => 2
,'imagem' => 'imagem_2'
,'cat' => 'categoria_2'
)
,array(
'id' => 3
,'imagem' => 'imagem_3'
,'cat' => 'categoria_3'
)
,array(
'id' => 4
,'imagem' => 'imagem_4'
,'cat' => 'categoria_1'
)
);
//Refazemos a listagem porem o primeiro indice/coluna é a que desejamos ordenar (no caso por cat)
foreach($lista as $key => $val){
$lista[$key] = array(
'cat' => $lista[$key]['cat']
,'id' => $lista[$key]['id']
,'imagem' => $lista[$key]['imagem']
);
}
// var_dump($lista);sort($lista);
// var_dump($lista);
//Agora está ordenado de acordo com a categoria
$last_cat = '';
foreach($lista as $img){
// var_dump($img);
if($last_cat == '' || $last_cat != $img['cat']){
echo '<h2>##'. $img['cat'] .'##</h2>';
}
$last_cat = $img['cat'];
echo '<h4>'. $img['imagem'] .'</h4>';
}
Saida:
##categoria_1##
imagem_1
imagem_4
imagem_5
##categoria_2##
imagem_2
##categoria_3##
imagem_3
>
Boa tarde,
Não sei se é a melhor maneira de fazer.
Antes do loop, crie um array agrupando as imagens por categorias, ficaria algo assim
array(categoria_1 => array(imagem_1, imagem_4 , imagem_5), categoria_2 => array(imagem_2), categoria_3 => array(imagem_3))
a partir dai é só dar um loop no array (recomendo foreach) e fazer o que você faz, lembrando que o array tem como valor para a categoria um novo array.
Valeu cara, seguindo sua lógica deu mesmo certo.
Adicionar um ORDERBY categoria no select não serve?
Boa tarde,
Não sei se é a melhor maneira de fazer.
Antes do loop, crie um array agrupando as imagens por categorias, ficaria algo assim
array(categoria_1 => array(imagem_1, imagem_4 , imagem_5), categoria_2 => array(imagem_2), categoria_3 => array(imagem_3))
a partir dai é só dar um loop no array (recomendo foreach) e fazer o que você faz, lembrando que o array tem como valor para a categoria um novo array.