Ir para conteúdo

POWERED BY:

Arquivado

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

jcalebe

[Resolvido] Duas arrays em Foreach

Recommended Posts

Olá!

Tenho um código que gera duas arrays. Preciso que um foreach imprima o resultado das duas, pois a tabela que tenho tem duas colunas. O código:

 

while($row = mysql_fetch_assoc($query)){
$titulo[] = $row['titulo'];
$id[] = $row['id'];
}

 

As arrays geradas são {var_export()}:

$titulo = array (
 0 => 'Galeria 1',
 1 => 'Galeria 1',
 2 => 'Galeria1',
 3 => 'Galeria 3',
 4 => 'Galeria 12',
 5 => 'Galeria 13',
 6 => 'Galeria 12',
 7 => 'Galeria 4',
 8 => 'Galeria 1',
);

$id = array (
 0 => '1',
 1 => '2',
 2 => '3',
 3 => '4',
 4 => '5',
 5 => '6',
 6 => '7',
 7 => '8',
 8 => '9',
);

 

Obrigado! :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq você não monta a tabela dentro do próprio while

 

caso contrario pode fazer um só array, utilizando o id como índice do array

while($row = mysql_fetch_assoc($query)){ 
  $titulo[$row['id']] = $row['titulo'];    
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não testei, mas seria algo assim

 

while( $res = mysql_fetch_array($query) ) {
$titulo[$res['id']] = $res['titulo'];
}

 

Depois você faz apenas um foreach resgatando o id e o titulo -> respectivamente.

foreach( $titulo as $chave => $valor ) {
echo 'Id: ' . $chave . ' - Titulo: ' . $valor . '<br>';
}

 

Seria +- isso, não precisa criar 2 arrays, não testei, mas é p/ funcionar. :thumbsup:

 

======================

 

Desculpa, não vi que o amigo Victor havia postado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é imprimir 2 resultados, e sim quatro!

 

2 de $titulo e 2 de $id.

 

Veja:


while( $res = mysql_fetch_array($query) ) {
$titulo[$res['id']] = $res['titulo'];
}

foreach($titulo as $idd=>$titl){

//Imprime um resultado
echo $idd.' - '.$titl.'<br />'; //1 - Galeria 15<br />

//Agora como eu imprimo o próximo resultado do array aqui?
//2 - Galeria 17<br />
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

$result = array();
while($array = mysql_fetch_array($query)) {
 $result[] = $array ;
}

foreach ($result as $array)
 echo "Id: $array[id] - Título: $array[titulo]<br />";

OU

$result = array();
while($object = mysql_fetch_object($query)) {
 $result[] = $object;
}

foreach ($result as $object)
 echo "Id: {$object->id} - Título: {$object->titulo}<br />";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vocês não entenderam!

Eu tenho uma tabela que tem duas colunas e n linhas. A organização é essa:

 

<table>
<tbody>

<?php 
while( $res = mysql_fetch_array($query) ) {
$titulo[$res['id']] = $res['titulo'];
}

/*Loop aqui */

?>
<tr>
    <td><?php /* Resultado 1 */ ?></td>
    <td><?php /* Resultado 2 */ ?></td>
</tr>

<?php /* Fim do loop */ ?>

</tbody>
</table>

 

Neste exemplo, o primeiro loop do foreach deve imprimir os índices 1 e 2 do array $titulo! No próximo loop, ele vai imprimir os índices 3 e 4, e assim sucessivamente.

 

Mas o problema é que não consigo montar um loop que possa imprimir 2 índices diferentes de um array em cada loop.

 

Abraços!

:ninja:

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha se isso resolve

$res = mysql_fetch_assoc($query);
echo "<table><tr> 
          <td>id: {$res['id']} - titulo: {$res['titulo']}</td>";           
$cont = 1; 
while( $res = mysql_fetch_assoc($query) ) { 
  echo $cont % 2 == 0 ? "</tr><tr>" : "";
  echo "<td>id: {$res['id']} - titulo: {$res['titulo']}</td>"; 
  $cont++;
} 
echo "</tr></table>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Victor, não funcionou.

Vejam o que tenho até agora, e se podem ajudar. Preciso adiantar o ponteiro interno do loop em + 1, após imprimir o primeiro resultado. O problema está na linha 39(comentei):

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Slideshow!</title>
<link rel="stylesheet" type="text/css" href="css/base.css" media="screen" />
</head>
<body>
<h1><p style="text-align:center;">ÁLBUM DE IMAGENS</p></h1>
<br />

<table align="center" id="gall" cellpadding="0" cellspacing="0">
<tbody>

<tr>
<td>Nome</td>
<td>Nome</td>
</tr>
<?php
require_once('conect.php');

$sql = 'SELECT * FROM `dados` ';

$query = mysql_query($sql);

$titulo = array();
$id = array();


while($row = mysql_fetch_assoc($query)){
$dado[$row['id']] = $row['titulo'];
}


foreach($dado as $id => $titulo){
?>
<tr>
<td><a href="galeria.php?id=<?php echo $id; ?>"><?php echo $titulo; ?> <img align="center" src="./thumbs/<?php echo $id; ?>.jpg" /></a></td>


/* Linha 39: Não consigo fazer este next() funcionar */

<?php if(next() === false){echo'<td>-</td>'; break;}?>
<td><a href="galeria.php?id=<?php echo $id; ?>"><?php echo $titulo; ?> <img align="center" src="./thumbs/<?php echo $id; ?>.jpg" /></a></td>
</tr>
<?php
}
?>

</tbody>
</table>
<p style="font-size:8pt;text-align:left;">Galeria de Imagens - <?php echo date('Y'); ?></a></p>
</body>
</html>	
<?php
@mysql_close($conexao);
?>

 

 

Abraços. B)

Compartilhar este post


Link para o post
Compartilhar em outros sites

já resolvi, substituí o foreach por um while(true):

(só para com o break)

<table align="center" id="gall" cellpadding="0" cellspacing="0">
<tbody>

<tr id="tit">
<td>Nome</td>
<td></td>
<td>Nome</td>
<td></td>
</tr>
<?php
require_once('conect.php');

$sql = 'SELECT * FROM `dados` ';

$query = mysql_query($sql);

$titulo = array();
$id = array();


while($row = mysql_fetch_assoc($query)){
$id[] = $row['id'];
$titulo[] = $row['titulo'];
}
$total = count($id)-1;

while(true){
if(!isset($id[$total])) break;
?>
<tr>
<td><a href="galeria.php?id=<?php echo $id[$total]; ?>"><?php echo $titulo[$total]; ?></a></td>
<td><a href="galeria.php?id=<?php echo $id[$total]; ?>"><img align="center" src="./thumbs/<?php echo $id[$total]; ?>.jpg" /></a></td><?php $total--; if(!isset($id[$total])){echo'<td>-</td><td></td>'; break;}?>

<td><a href="galeria.php?id=<?php echo $id[$total]; ?>"><?php echo $titulo[$total]; ?></a></td>
<td><a href="galeria.php?id=<?php echo $id[$total]; ?>"><img align="center" src="./thumbs/<?php echo $id[$total]; ?>.jpg" /></a></td>
</tr>
<?php
$total--;
}
?>
</tbody>

 

Abraços.

:skull: :ninja:

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo você ta usando array desnecessariamente, já poderia tá usando o 1º loop para exibir o resultado, é só uma questão de adaptação.

loops e condições gastam muito processamento, ainda mais as duas juntas, quanto menos utiliza melhor para o desempenho da aplicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi isso que perguntei desde o início! Mas nenhuma das respostas que me deram funcionou, então tive que inprovisar esse código.

 

Mesmo que ele sendo um cuzamento de um tijolo com uma tartaruga alejada, foi o único que consegui.

 

Você reparou que cada loop escreve 2 índices (o segundo é $var--; que o primeiro) diferentes de dois arrays diferentes até consumir todo o array?

 

Exemplo:

 

while(){

loop1-> escreve 6 e 5

loop2-> escreve 4 e 3

loop3-> escreve 2 e 1

break;

 

}

 

[]'s

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.