Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu tenho um laço de repetição, dentro deste foreach eu tenho uma $c, que tem 3 dados no mesmo indice do array
foreach($a as $b):
// se eu der um
var_dump($c[1]);
//ele retorna desse jeito
array (size=1)
0 => string 'HotDog' (length=6)
array (size=1)
0 => string 'Sanduíche' (length=9)
array (size=1)
0 => string 'Pastel Frito' (length=11)
$b['texto'] = 'Vendo deliciosos lanches: Temos' // Se imprimir aqui repete 3 vezes
endforeach;
// Se imprimir aqui só pega um valor da $c[1]
O que eu preciso é "imprimir" os dados dessa $c[1], extraídos fora do foreach, para que a $b, não se repita três vezes.
Como faço?
Entendo, era só um exemplo.
Deixa eu reformular. Porque às vezes colocamos aqui parte desnecessária do código.
class EmailMensagem {
private $Mensagem;
private $Dados;
public function PedidoSucesso($Dados){
$this->Dados = $Dados;
$this->Mensagem = " <p> Prezado(a) {$this->Dados->cliente_nome}, </p> ";
$this->Mensagem.= " <p>Recebemos seu pedido e o mesmo está sendo processado. </p> ";
$this->Mensagem.= " <p>Os detalhes deste pedido estão logo abaixo: </p> ";
$this->Mensagem.= " <p>Número do Pedido: {$this->Dados->pedido_numero} </p> ";
$this->Mensagem.=" <p> Produto(s):</p> ";
foreach ($array as $a):
$this->Mensagem.= "<p> {$a[0]} R$: {$a[1]} </p> ";
endforeach;
$this->Mensagem.=" <p>Valor Total: R$ </p> ";
$this->Mensagem.=" <p>Método de Pagamento: </p> ";
$this->Mensagem.=" <p>Você receberá um e-mail, com o andamento deste pedido. </p> ";
return $this->Mensagem;
}
dentro desse foreach, abaixo
foreach ($array as $a):
$this->Mensagem.= "<p> {$a[0]} R$: {$a[1]} </p> ";
endforeach;Mas quando dar o return, só volta 1.
A minha maior dúvida é:
Porque quanto se manda dar um return tanto em uma classe(metodo) ou no estruturado só retorna um valor que está no foreach?
Se eu passo tudo isso para um arquivo.php como variavel comum, retira o $this e ponhe $mesagem e dou um apenas um include nesse arquivo os dados do foreach retornam normal, todos que existem voltam.
<?php
$mensagem = " <p>Prezado(a) {$res->cliente_nome} {$res->cliente_sobrenome},</p>";
$mensagem.= " <p>Queremos agradecer pela sua compra e informá-lo(a) que a mesma está sendo processada.</p><br />";
$mensagem.= " <p style = \"color:#00468C\"><b>Os detalhes deste pedido estão logo abaixo:</b></p> ";
$mensagem.= " <p><b>Data:</b> {$data}</p> ";
$mensagem.= " <p><b>Número do Pedido:</b> {$res->pedido_numero}</p> ";
if ($array):
$mensagem.=" <p><b>Produto(s):</b></p> ";
foreach ($array as $a):
$mensagem.= "<p> - {$a[0]} R$:</b>{$a[1]} </p> ";
endforeach;
endif;
$mensagem.=" <p><b>Valor Total:</b> R$ </p> ";
$mensagem.=" <p><b>Método de Pagamento:</b> </p> ";
$mensagem.=" <p><b>Status do Pagamento:</b> </p> <hr/> ";A variável $array dentro do contexto do seu método PedidoSucesso está vindo de onde? Onde você declarou esse array?
Minha impressão é que você está tentando converter um código que antes era estruturado para OO, mas ainda não tem domínio da orientação a objetos. Existe alguma dúvida nesse sentido, que eu possa tentar te ajudar?
Essa é uma outra classe. A Classe Pedido e este é o metodo que envia o email para cada novo pedido
public function setiMail() {
$read = new Read;
$read->ReadJoin('pedidos', 'clientes', 'cliente_id', 'produtos', 'produto_id', "WHERE pedidos.pedido_numero = "20160104");
if ($read->getResult()):
foreach ($read->getResult() as $res):
/* A forma que está comentada abaixo funciona
$array[] = array($res->produto_nome, $res->pedido_subtotal);
require 'email/pedidoSucesso.php'; */
$email = new EmailMensagem;
$email->PedidoSucesso($res, $array);
endforeach;
//echo $mensagem;
// $mail = new Email();
// $mail->SystemMail($res);
// if ($mail->getError()):
// SETERRO($mail->getError()[0], $mail->getError()[1]);
// else:
// SETERRO($mail->getError()[0], $mail->getError()[1]);
// endif;
else:
$this->Result = false;
endif;
}Eu crio essa $array para levar para o metodo os dados que se repetem
Produtos e seus valores, as demais coisas são as mesmas.
Por isso quero extrair esse array dentro do método e trazer os seus valores pelo indice 0 (nome do produto ) e 1 (preco)
var_dump($array), me retorna
array (size=3)
0 =>
array (size=2)
0 => string 'Produto1'
1 => string '200' 0 => string 'Produto2'
1 => string '222' 0 => string 'Produto3'
1 => string '123'Não consigo entender, mas agora funcionou.
O return, veio com todos os dados e agora está beleza.
Eu agradeço pela atenção dispensada Matheus.
Cara, me desculpe, mas sua pergunta está muito mal formulada. Procure separar seu código do retorno e utilizar nomes de variáveis mais sugestivos.
Pelo que eu entendi, você precisa inutilizar o foreach para dar vez ao implode().