Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcelo2605

[Resolvido] Problemas com explode

Recommended Posts

Tenho o seguinte script para uma galeria de fotos

 

<div class="imageGallery">
<?php 
$fotos = explode(",", $row_rsGalerias['fotos']);
$legendas = explode("|", $row_rsGalerias['legendas']); 
$index = 0;
foreach(array_combine($fotos, $legendas) as $fotos => $legendas){ 
?>
<a href="img/<?php echo $fotos; ?>" class="colorBox" title="<?php echo $legendas; ?>"> <?php if($index == 0){ ?><img src="img/<?php echo $row_rsGalerias['thumb']; ?>" alt="<?php echo $row_rsGalerias['titulo']; ?>" /> <?php }else{} ?></a>
<?php $index++; } ?>
<h2 class="darkBlue"><?php echo $row_rsGalerias['titulo']; ?></h2>
</div>

 

Ele funciona bem. mas quando insiro mais de 29 fotos, dá o seguinte erro:

 

Warning: array_combine() [<a href='function.array-combine'>function.array-combine</a>]: Both parameters should have an equal number of elements in C:\wamp\www\teste\fotos.php on line 58

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade não é pelo fato de ter + de 29 fotos =P, parece que o número de fotos e de legenda estão diferentes.

Dê um "count()" nas fotos e nas legendas e verifique se ambos possuem a mesma quantidade.

 

<div class="imageGallery">
<?php 
$fotos = explode(",", $row_rsGalerias['fotos']);
$legendas = explode("|", $row_rsGalerias['legendas']); 

echo count($fotos);
echo ' - ';
echo count($legendas);
die;

$index = 0;
foreach(array_combine($fotos, $legendas) as $fotos => $legendas){ 
?>
<a href="img/<?php echo $fotos; ?>" class="colorBox" title="<?php echo $legendas; ?>"> <?php if($index == 0){ ?><img src="img/<?php echo $row_rsGalerias['thumb']; ?>" alt="<?php echo $row_rsGalerias['titulo']; ?>" /> <?php }else{} ?></a>
<?php $index++; } ?>
<h2 class="darkBlue"><?php echo $row_rsGalerias['titulo']; ?></h2>
</div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu olhei no banco, mas todas as imagens têm legenda. Nenhum campo vazio.

 

Executou com os echos do código que eu postei?

Ambos retornaram o mesmo valor?

 

<div class="imageGallery">
<?php 
$fotos = explode(",", $row_rsGalerias['fotos']);
$legendas = explode("|", $row_rsGalerias['legendas']); 

echo count($fotos);
echo ' - ';
echo count($legendas);
die;

$index = 0;
foreach(array_combine($fotos, $legendas) as $fotos => $legendas){ 
?>
<a href="img/<?php echo $fotos; ?>" class="colorBox" title="<?php echo $legendas; ?>"> <?php if($index == 0){ ?><img src="img/<?php echo $row_rsGalerias['thumb']; ?>" alt="<?php echo $row_rsGalerias['titulo']; ?>" /> <?php }else{} ?></a>
<?php $index++; } ?>
<h2 class="darkBlue"><?php echo $row_rsGalerias['titulo']; ?></h2>
</div>

 

Coloquei o count e deu diferença.

 

Mas no banco está certinho: todas as fotos têm legenda.

 

Tipo... pode ter fotos com | no nome saca? vê se é isso o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como disse o FMiyahira os arrays não possuem o mesmo tamanho...

 

1. Verifique se nenhuma imagem possui vírgula em seu nome

2. Verifique se nunhuma legenda possui o caractere | em sua descricao

3. Qual seria a vantagem de separar os arrays e combinarem eles depois?! Que tal usar o for!?

<?php
$tamArray = count($fotos);
for($i=0;$i<$tamArray;$i++) {
?>
<a href="img/<?php echo $fotos[$i]; ?>" class="colorBox" title="<?php echo $legendas[$i]; ?>"> <?php if($index == 0){ ?><img src="img/<?php echo $row_rsGalerias['thumb']; ?>" alt="<?php echo $row_rsGalerias['titulo']; ?>" /> <?php } ?></a>
<?php $index++; } ?>
<h2 class="darkBlue"><?php echo $row_rsGalerias['titulo']; ?></h2>
</div>
<?php
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, fiz uma busca no banco e não há nenhum | nas legendas e nenhuma , nas imagens

 

Matrix, uso dessa forma por causa da query do BD:

 

SELECT GROUP_CONCAT(fotos.legenda SEPARATOR '|') AS legendas, GROUP_CONCAT(fotos.imagem) AS fotos, galerias.id_galeria, galerias.titulo, galerias.thumb FROM fotos JOIN galerias ON fotos.id_galeria = galerias.id_galeria GROUP BY galerias.id_galeria ORDER BY galerias.id_galeria DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o array da galeria com problemas (são várias dentro da mesma página, mas só essa dá problema)

 

Array ( [0] => 4b6e54714052dd12007143b910ccde2c.jpg [1] => ee50ab34bb352b9beb8da73dfca95977.jpg [2] => 1c9bf7f2e2edc1191a0c88c5199d38ba.jpg [3] => d567c9c38e339822d7bb8f41b48206a7.jpg [4] => 52634382688b00d86338cc82c2eec16e.jpg [5] => 7b5398242e1914121cd74e80ed44643e.jpg [6] => 09b8c64a92ea5006de2b51d562cd24fe.jpg [7] => c23a024629a9cd46be6e3db0d6db9b17.jpg [8] => 153659eb9e31b36474d9fdf5dde7d4fd.jpg [9] => 72c47b2f4047e21a24c12c0e01afef60.jpg [10] => e125f86320307d3c12e42468656ad075.jpg [11] => 0f90b42974ab5c17fdeb3b4281ff7a0c.jpg [12] => ff169b8a537fe148ebe5c09ef797660a.jpg [13] => f25af161e824fac7929795fe76aa1600.jpg [14] => 174be0efa257cecfba0b25caaec4d25a.jpg [15] => 894113560fc7160bbe7d1f6f7442f38a.jpg [16] => 7e44909ab8ee8233022090230ff4e6c1.jpg [17] => 37af08e316ace1d1b17da253102f4154.jpg [18] => 1ee726c81d807bab4dbe6537eeee090a.jpg [19] => 9cac6710b581ab5618e252d44701bc80.jpg [20] => e60ee3f4a0ade412faddb102f41bc40e.jpg [21] => 035.jpg [22] => 9e94975e81f352efaac685dbc13a78e3.jpg [23] => 2085a8078a41fc1f1ff5df723562e3a1.jpg [24] => 88fccd42a9e90dabb5b1b754e5d50a6e.jpg [25] => e1ffef055f82a8d734ac85f88e91e9c6.jpg [26] => 6c3448e6059f938c499b2385eeabe319.jpg [27] => 041.jpg [28] => 042.jpg [29] => 044.jpg [30] => 29776f9a71f38848752dd564588652 ) 
Array ( [0] => Espaço gourmet [1] => Igreja [2] => Todos os apartamentos são de frente para o mar [3] => A capela comporta [4] => Gazebo com vista para a quadra de tênis [5] => Vista geral e jardim [6] => Para relaxar de frente para o mar [7] => A sala de estar [8] => Decoração do espaço gourmet [9] => Coleção de pratos no espaço gourmet [10] => Espaço gourmet [11] => Café da manhã baiano [12] => Varanda dos apartamentos 1 2 e 3 [13] => Quadras de tênis e de beach volei [14] => Fim de tarde [15] => Todos os apartamentos são de frente para o mar [16] => A recepção tem computador para os hóspedes, livros, dvds e revistas [17] => Sala de estar para todos [18] => Imagem da varanda da sede [19] => Sala de café da manhã e restaurante [20] => Sala de estar [21] => Vista geral no fim da tarde [22] => Quadra de tênis [23] => Vista da praia: quase na hora do pôr do sol [24] => Vista da Pousada A Capela [25] => Restaurante, bar e espaço gourmet: sabores da Bahia [26] => Serviço de praia e muitas mordomias [27] => Detalhe do muro da piscina: reflexo das belezas naturais [28] => Deck da piscina: vista para os muitos azuís do mar e ser ) 

 

O número de fotos é maior que o número de legendas. Mas no bd todas as fotos têm legenda. Não sei o que está acontecendo.

 

Alguém tem alguma idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí vai:

 

SELECT GROUP_CONCAT(fotos.legenda SEPARATOR '|') AS legendas, GROUP_CONCAT(fotos.imagem) AS fotos, galerias.id_galeria, galerias.titulo, galerias.thumb FROM fotos JOIN galerias ON fotos.id_galeria = galerias.id_galeria GROUP BY galerias.id_galeria ORDER BY galerias.id_galeria DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o array da galeria com problemas (são várias dentro da mesma página, mas só essa dá problema)

 

Array ( [0] => 4b6e54714052dd12007143b910ccde2c.jpg [1] => ee50ab34bb352b9beb8da73dfca95977.jpg [2] => 1c9bf7f2e2edc1191a0c88c5199d38ba.jpg [3] => d567c9c38e339822d7bb8f41b48206a7.jpg [4] => 52634382688b00d86338cc82c2eec16e.jpg [5] => 7b5398242e1914121cd74e80ed44643e.jpg [6] => 09b8c64a92ea5006de2b51d562cd24fe.jpg [7] => c23a024629a9cd46be6e3db0d6db9b17.jpg [8] => 153659eb9e31b36474d9fdf5dde7d4fd.jpg [9] => 72c47b2f4047e21a24c12c0e01afef60.jpg [10] => e125f86320307d3c12e42468656ad075.jpg [11] => 0f90b42974ab5c17fdeb3b4281ff7a0c.jpg [12] => ff169b8a537fe148ebe5c09ef797660a.jpg [13] => f25af161e824fac7929795fe76aa1600.jpg [14] => 174be0efa257cecfba0b25caaec4d25a.jpg [15] => 894113560fc7160bbe7d1f6f7442f38a.jpg [16] => 7e44909ab8ee8233022090230ff4e6c1.jpg [17] => 37af08e316ace1d1b17da253102f4154.jpg [18] => 1ee726c81d807bab4dbe6537eeee090a.jpg [19] => 9cac6710b581ab5618e252d44701bc80.jpg [20] => e60ee3f4a0ade412faddb102f41bc40e.jpg [21] => 035.jpg [22] => 9e94975e81f352efaac685dbc13a78e3.jpg [23] => 2085a8078a41fc1f1ff5df723562e3a1.jpg [24] => 88fccd42a9e90dabb5b1b754e5d50a6e.jpg [25] => e1ffef055f82a8d734ac85f88e91e9c6.jpg [26] => 6c3448e6059f938c499b2385eeabe319.jpg [27] => 041.jpg [28] => 042.jpg [29] => 044.jpg [30] => 29776f9a71f38848752dd564588652 ) 
Array ( [0] => Espaço gourmet [1] => Igreja [2] => Todos os apartamentos são de frente para o mar [3] => A capela comporta [4] => Gazebo com vista para a quadra de tênis [5] => Vista geral e jardim [6] => Para relaxar de frente para o mar [7] => A sala de estar [8] => Decoração do espaço gourmet [9] => Coleção de pratos no espaço gourmet [10] => Espaço gourmet [11] => Café da manhã baiano [12] => Varanda dos apartamentos 1 2 e 3 [13] => Quadras de tênis e de beach volei [14] => Fim de tarde [15] => Todos os apartamentos são de frente para o mar [16] => A recepção tem computador para os hóspedes, livros, dvds e revistas [17] => Sala de estar para todos [18] => Imagem da varanda da sede [19] => Sala de café da manhã e restaurante [20] => Sala de estar [21] => Vista geral no fim da tarde [22] => Quadra de tênis [23] => Vista da praia: quase na hora do pôr do sol [24] => Vista da Pousada A Capela [25] => Restaurante, bar e espaço gourmet: sabores da Bahia [26] => Serviço de praia e muitas mordomias [27] => Detalhe do muro da piscina: reflexo das belezas naturais [28] => Deck da piscina: vista para os muitos azuís do mar e ser ) 

 

O número de fotos é maior que o número de legendas. Mas no bd todas as fotos têm legenda. Não sei o que está acontecendo.

 

Alguém tem alguma idéia?

 

A descrição da posição 28 do array de legendas está completo?

[28] => Deck da piscina: vista para os muitos azuís do mar e ser

 

To achando que o GROUP_CONCAT tem um limit máximo para o tamanho do retorno... apenas uma suposição...

Por isso quando você busca um número mais elevado de fotos, acaba estourando esse limite na concatenação da string da legenda =P

Acho melhor você mudar sua query o/ #ficadica

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, ela está aparecendo cortada. Mas o varchar é 255.

 

To achando que o GROUP_CONCAT tem um limit máximo para o tamanho do retorno... apenas uma suposição...

Por isso quando você busca um número mais elevado de fotos, acaba estourando esse limite na concatenação da string da legenda =P

Acho melhor você mudar sua query o/ #ficadica

 

Não, ela está aparecendo cortada. Mas o varchar é 255.

 

Essa página comprova minhas suspeitas: (Tamanho padrão de retorno no máximo 1024 caracteres)

Explica como aumentar esse valor.. mas eu ainda assim mudaria a lógica de fazer a coisa =P

 

http://technical.allofe.com/contentm/easy_pages/easy_page_view.php?sid=62&page_id=246&blueprint_id=113

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, pode ser isso. Encontrei essa resposta no stackoverflow:

 

The group_concat result length is limited(truncated) to the value of the group_concat_max_len system variable. The default value of this variable is 1024.

 

If you want change the value of the variable the syntax is:

 

SET [GLOBAL | SESSION] group_concat_max_len = val;

 

Mas onde faço essa alteração? Na própria página?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.