Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

como faz para o foreach repetir para direita em vez

queria saber como fazer o foreach repetir para direita com uma quantidade Ex:5 e depois quebrar linha e fazer mais 5, em vez de ir para baixo quebrando linha de 1 em 1 como está na aula,

9 respostas

Opa Lucas, bom dia, tudo beleza ?

Não sei se isso responde sua dúvida, porem o foreach itera sobre o array ou o objeto de maneira dinâmica sem você precisar a quantidade de arrays ou de objetos. Então diretamente com ele você precisaria fazer um if

Segue exemplo :

$vetor = [
    1,2,3,4,5,6,7,8,9,0
];

foreach ($vetor as $chave => $valor) {
    if ($chave == 5) {
        echo (PHP_EOL);
    }
    echo ($chave);
}

Outro exemplo seria com a estrutura de repetição for :

$vetor = [
    1,2,3,4,5,6,7,8,9,0
];

for ($i=0; $i < count($vetor); $i++) { 
    if ($i == 5) {
        echo PHP_EOL;
    }
    echo $vetor[$i];
}

Aqui $i passa a ser o índice da variável e iteramos até que ela tenha o tamanho do vetor utilizando a função count() do php

Não sei bem se era isso que vc queria hehe.

Abs,

não é exatamente isso, olha o meu cod abaixo, eu acho que é natural do foreach ir colocando em linhas, mas o que está quebrando para colunas é minhas div, se forem as div não to conseguindo resolver isso também

<div class="sorteios">
            <h1>Sorteios</h1>
            <?php foreach($sorteios as $sorteio) : ?>
            <div class="sorteio">
                <h2><?php echo $sorteio['name'];?></h2>
                <ul>
                    <li class="data">Data do Sorteio:<br><?php echo $sorteio['agenda'];?></li>
                    <li class="valor">R$ <?php echo money_format('%i', $sorteio['price']);?></li>
                </ul>
                <div class="disponivel">

                        <?php if($sorteio['isactive'] == 0):?>
                            <div class="btn-participar">
                                 <a>participar</a>
                            </div>
                        <?php else:?>
                            <div class="finalizado">
                                 <ul>finalizado</ul>
                            </div>
                        <?php endif; ?>  
                </div>
            </div>
            <?php endforeach; ?>
        </div>

vou colocar dessa forma para ser mais pratico entendender o que ta rolando. Coloquei na variavel sorteios os numeros só p ela ter algo dentro.

<html>
<body>
<?php 
$sorteios = [
    1,2,3,4,5,6,7,8,9,0
];

?>
<div class="sorteios">
            <h1>Sorteios</h1>
            <?php foreach($sorteios as $sorteio) : ?>
            <div class="sorteio">
                <h2>Titulo</h2>
                <ul>
                    <li class="data">Data do Sorteio:</li>
                    <li class="valor">R$</li>
                </ul>
                <div class="disponivel">

                        <?php if($sorteio['isactive'] == 0):?>
                            <div class="btn-participar">
                                 <a>participar</a>
                            </div>
                        <?php else:?>
                            <div class="finalizado">
                                 <ul>finalizado</ul>
                            </div>
                        <?php endif; ?>  
                </div>
            </div>
            <?php endforeach; ?>
        </div>

</body>
</html>

Lucas, acho que sua dúvida não ficou clara ainda.

O que realmente você quer fazer no código? Qual saída você quer gerar? Seu último exemplo ficou mais confuso por que vc definiu um array simples chamado sorteio, depois tenta percorrer esse mesmo array com indices inexistentes.

ta bom cmo n dá p eu enviar uma imagem do que ocorre, vou simplificar o código, de acordo com a aula, a minha variável $sorteios vai receber informações do banco de dados ok, só coloquei alguma informação ali para o código funcionar em qualquer compilador php e ele saber que tem algo dentro da variável o que tem dentro não importa nesse momento, então se compilar esse código meu pode ver que ele vai repetir a palavra titulo algumas vezes para baixo, só que eu quero que ele repita para o lado em vez de para baixo, vou dar exemplo:

atualmente o código funciona assim:

Titulo (quebra a linha). Titulo (quebra a linha). Titulo (quebra a linha). Titulo (quebra a linha). Titulo (quebra a linha). Titulo (quebra a linha). Titulo (quebra a linha).

Gostaria que ele funcionasse assim: Titulo Titulo Titulo Titulo Titulo (quebra a linha). Titulo Titulo Titulo Titulo Titulo (quebra a linha).

<html>
<body>
<?php 
$sorteios = [
    1,2,3,4,5,6,7,8,9,0
];

?>
<div class="sorteios">
            <h1>Sorteios</h1>
            <?php foreach($sorteios as $sorteio) : ?>
            <div>
                <h2>Titulo</h2>
            </div>
            <?php endforeach; ?>
        </div>

</body>
</html>

Se eu entendi corretamente você quer um contador para que a cada 5 vezes dentro do loop te faça quebrar uma linha.

Se for realmente isso você terá que definir uma variável para ser esse contador e ir incrementando o valor dele dentro do loop. Antes de exibir o titulo vc faz uma verificação se o valor atual do contador é múltiplo de 5, caso for vc quebra uma linha.

É isso mesmo?

eu acho que talvez seja isso, mas não compreendi como fazer.

Oi lucas, tente rodar na sua máquina e veja se é realmente o que deseja, caso seja o que deseja mas não entendeu o que eu fiz vc me fala:

<html>
<body>
<?php 
$sorteios = [
    1,2,3,4,5,6,7,8,9,0
];

$count = -1;
$multiplo = 5;

function quebraLinha(int $count, int $multiplo) {
    if($count%$multiplo === 0){
        return '<br>';
    }
}

?>
<div class="sorteios">
            <h1>Sorteios</h1>
            <?php foreach($sorteios as $sorteio) : ?>
            <?php $count++; echo quebraLinha($count, $multiplo); ?>
            <div>

                <h2>Titulo</h2>
            </div>
            <?php endforeach; ?>
        </div>

</body>
</html>
solução!

consegui resolver era só eu mudar uma propriedade no meu css, desculpa pelo incomodo, e obrigado pela disposição :D.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software