Ir para conteúdo

Arquivado

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

diego.baiao

Logica de programação, array e laços

Recommended Posts

Prezados, boa noite! 

 

Preciso de uma ajuda estou recebendo uma consulta em um array e está quase tudo mastigado na própria consulta do banco, porém tenho que trabalhar no php e fazer uma alteração que não estou conseguindo que é formatar uma saída padrão um array onde cada bloco desse seria um array com a principal coluna "mesano". Estou usando ZF1(zend framework 1) e não consigo usar class teria que fazer um helper mais não entendo bem estou tentando usar no braço usando laços (for, foreach, while, if-else, etc... rs)

Segue abaixo a saída da minha consulta (31 registros):

consultapgsql.jpg.2f8267c1b71221123e5748c193e3ba93.jpg

consultapgsql2.jpg.ed3ce632da854ce6d2a4b70b38b7205c.jpg

 

O Array da consulta listada acima fica conforme informação abaixo:

*** Não coloquei todos foi só para ilustrar minha saída real (abaixo ficou com os dados de maio, abril (2018) e final dezembro(2017) seria o ultimo registro posição do array [31])

 

["data"] => array(6) {
    [0] => array(5) {
        ["mes"] => string(1) "5"
        ["ano"] => string(4) "2018"
        ["mesano"] => string(6) "5/2018"
        ["entregue_sem_confirmacao"] => string(1) "8"
    }
    [1] => array(5) {
        ["mes"] => string(1) "5"
        ["ano"] => string(4) "2018"
        ["mesano"] => string(6) "5/2018"
        ["entregue_com_confirmacao"] => string(1) "1"
    }
    [2] => array(5) {
        ["mes"] => string(1) "4"
        ["ano"] => string(4) "2018"
        ["mesano"] => string(6) "4/2018"
        ["bloqueada"] => string(1) "2"
    }
    [3] => array(5) {
        ["mes"] => string(1) "4"
        ["ano"] => string(4) "2018"
        ["mesano"] => string(6) "4/2018"
        ["cancelada"] => string(2) "12"
    }
    [4] => array(10) {
        ["mes"] => string(1) "4"
        ["ano"] => string(4) "2018"
        ["mesano"] => string(6) "4/2018"
        ["nao_recebida"] => string(3) "207"
    }
    [5] => array(5) {
        ["mes"] => string(1) "4"
        ["ano"] => string(4) "2018"
        ["mesano"] => string(6) "4/2018"
        ["entregue_sem_confirmacao"] => string(3) "552"
    }
    [6] => array(5) {
        ["mes"] => string(1) "5"
        ["ano"] => string(4) "2018"
        ["mesano"] => string(6) "4/2018"
        ["entregue_com_confirmacao"] => string(4) "1146"
    }
    [7] => array(10) {
        ["mes"] => string(1) "5"
        ["ano"] => string(4) "2018"
        ["mesano"] => string(6) "4/2018"
        ["entregue_para_operadora"] => string(1) "3"
    }
    .................
    .................
    .................
    [31] => array(5) {
        ["mes"] => string(2) "12"
        ["ano"] => string(4) "2017"
        ["mesano"] => string(7) "12/2017"
        ["bloqueada"] => string(1) "1"
    }
    
}
        

Vendo a situação acima da imagem que é o resultado da consulta e a impressão com var_dump montado o array eu tenho que agrupar as informações pela coluna "mesano" que é uma concatenação da coluna "mês" com "ano". 

Vamos as considerações: 

*** No resultado dessa consulta vista acima eu preciso montar uma saida em um array, onde deva conter todos os status (7 status) (mesmo não aparecendo todos caso não tenha o status ele deve existir e ir com valor padrão "zero") e qtd agrupados por "mesano", segue abaixo todos os status possíveis e mais as informações adicionais que deve ter em cada bloco do array.

______________________________________________

Aguardando (status da consulta)

Bloqueada (status da consulta)

Não Recebida (status da consulta)

Enviado a operadora (status da consulta)

Entregue com confirmação (status da consulta)

Entregue sem confirmação (status da consulta)

Cancelada (status da consulta)

 

Total enviada  (vai ser uma posição do array nova onde deve contabilizar todas as qtd menos o que tiver cancelada caso exista)

Mesano  (vai ser o dado base para montar cada array)

opcoes (vai entrar um link fixo mais informações da coluna referente ao bloco mes e ano ex: link mes / ano)

_________________________________________________

 

Olhando o resultado da consulta acima eu teria 6 blocos de informações posição [0] a [5], sendo que conforme imagem e array acima a minha saida deverá conter 6 blocos de informações(arrays)( 1 bloco(array) 05/2018, 2 bloco(array) 04/2018, 3 bloco (array) 03/2018, 4 bloco (array) 02/2018 ,5 bloco(array) 01/2018 e 6 bloco(array)12/2017) preciso juntar as informações por blocos(array).

 

A saída que eu preciso é o array abaixo com 6 blocos(array) de saida sendo assim cada um deles respectivo de cada mes/ano:

 

["data"] => array(6) {
    [0] => array(10) {
        ["aguardando"] => string(1) "0"
        ["bloqueada"] => string(1) "0"
        ["enviado_operadora"] => string(1) "0"
        ["nao_recebida"] => string(1) "0"
        ["entregue_sem_confirmacao"] => string(1) "8"
        ["entregue_com_confirmacao"] => string(1) "1"
        ["cancelada"] => string(1) "0"
        ["total_enviado"] => string(1) "9"
        ["mes_ano"] => string(10) "Mai / 2018"
        ["opcoes"] => string(217) "<center><a href='/m/05/a/2018' title='Listar'</a></center>"
    }
    [1] => array(10) {
        ["aguardando"] => string(1) "0"
        ["bloqueada"] => string(1) "2"
        ["enviado_operadora"] => string(1) "3"
        ["nao_recebida"] => string(3) "207"
        ["entregue_sem_confirmacao"] => string(5) "1.146"
        ["entregue_com_confirmacao"] => string(3) "552"
        ["cancelada"] => string(2) "12"
        ["total_enviado"] => string(5) "1.910"
        ["mes_ano"] => string(10) "Abr / 2018"
        ["opcoes"] => string(217) "<center><a href='/m/04/a/2018' title='Listar'</a></center>"
    }     
    [2] => array(10) {
        ["aguardando"] => string(1) "1"
        ["bloqueada"] => string(1) "9"
        ["enviado_operadora"] => string(1) "2"
        ["nao_recebida"] => string(1) "5"
        ["entregue_sem_confirmacao"] => string(2) "10"
        ["entregue_com_confirmacao"] => string(2) "85"
        ["cancelada"] => string(3) "418"
        ["total_enviado"] => string(3) "112"
        ["mes_ano"] => string(10) "Mar / 2018"
        ["opcoes"] => string(217) "<center><a href='/m/03/a/2018' title='Listar'</a></center>"
    }
    [3] => array(10) {
        ["aguardando"] => string(1) "8"
        ["bloqueada"] => string(1) "2"
        ["enviado_operadora"] => string(1) "0"
        ["nao_recebida"] => string(1) "3"
        ["entregue_sem_confirmacao"] => string(2) "15"
        ["entregue_com_confirmacao"] => string(1) "9"
        ["cancelada"] => string(1) "1"
        ["total_enviado"] => string(2) "37"
        ["mes_ano"] => string(10) "Fev / 2018"
        ["opcoes"] => string(217) "<center><a href='/m/02/a/2018' title='Listar'</a></center>"
    }
    [4] => array(10) {
        ["aguardando"] => string(1) "0"
        ["bloqueada"] => string(2) "10"
        ["enviado_operadora"] => string(1) "1"
        ["nao_recebida"] => string(1) "4"
        ["entregue_sem_confirmacao"] => string(2) "15"
        ["entregue_com_confirmacao"] => string(2) "42"
        ["cancelada"] => string(1) "0"
        ["total_enviado"] => string(2) "72"
        ["mes_ano"] => string(10) "Jan / 2018"
        ["opcoes"] => string(217) "<center><a href='/m/01/a/2018' title='Listar'</a></center>"
    }
    [5] => array(10) {
        ["aguardando"] => string(1) "0"
        ["bloqueada"] => string(1) "1"
        ["enviado_operadora"] => string(1) "2"
        ["nao_recebida"] => string(1) "4"
        ["entregue_sem_confirmacao"] => string(1) "3"
        ["entregue_com_confirmacao"] => string(2) "25"
        ["cancelada"] => string(1) "0"
        ["total_enviado"] => string(2) "35"
        ["mes_ano"] => string(10) "Dez / 2017"
        ["opcoes"] => string(217) "<center><a href='/m/12/a/2017' title='Listar'</a></center>"
    }
}

Obrigado pela compreensão e leitura!

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, diego.baiao disse:

A saída que eu preciso é o array abaixo com 6 blocos(array) de saida sendo assim cada um deles respectivo de cada mes/ano:

 

Eai Diego

pelo o que eu entendi, você quer efetuar a pesquisa no seu banco de dados e informar no php?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa bom dia IGU. 

 

Eu tenho minha consulta o qual tem os 32 registros correto , ate ai blz. 

No meu model eu trabalho com ZF1 com MVC, eu tenho a consulta condensada e chamo ela no meu Controller. 

Dando um var dump nela tenho aqueles dados conforme array de 31 posições = 32 registros (pois a posição "zero" conta tb) ate ai blz também. 

 

Agora que vem o problema tenho que montar aquela saída dos 6 blocos(arrays) de saida exatamente no formato passado. Esses dados que eu puxo sempre tera 6 meses atuais, na minha consulta do banco ele ja identifica o mes atual e decrementa mais 5 meses totalizando sempre 6 meses, então independente minha saída sempre será nesse padrão independente de quantos registros tenha minha consulta nessa especifica veio (32 registros) para meu usuário, isso varia de sauriose para usurário, pois é a movimentação da conta, então tenho que pegar esses dados e agrupados de maneira que fique tudo na mesma forma conforme acima citado.  

Tem que ficar assim e isso é padrão para todos os usuários, sempre vai ter 6 blocos(arrays) onde agrupa status e quantidade por mes/ano

 

["data"] => array(6) {
    [0] => array(10) {
        ["aguardando"] => string(1) "0"
        ["bloqueada"] => string(1) "0"
        ["enviado_operadora"] => string(1) "0"
        ["nao_recebida"] => string(1) "0"
        ["entregue_sem_confirmacao"] => string(1) "8"
        ["entregue_com_confirmacao"] => string(1) "1"
        ["cancelada"] => string(1) "0"
        ["total_enviado"] => string(1) "9"
        ["mes_ano"] => string(10) "Mai / 2018"
        ["opcoes"] => string(217) "<center><a href='/m/05/a/2018' title='Listar'</a></center>"
    }
    [1] => array(10) {
        ["aguardando"] => string(1) "0"
        ["bloqueada"] => string(1) "2"
        ["enviado_operadora"] => string(1) "3"
        ["nao_recebida"] => string(3) "207"
        ["entregue_sem_confirmacao"] => string(5) "1.146"
        ["entregue_com_confirmacao"] => string(3) "552"
        ["cancelada"] => string(2) "12"
        ["total_enviado"] => string(5) "1.910"
        ["mes_ano"] => string(10) "Abr / 2018"
        ["opcoes"] => string(217) "<center><a href='/m/04/a/2018' title='Listar'</a></center>"
    }     
    [2] => array(10) {
        ["aguardando"] => string(1) "1"
        ["bloqueada"] => string(1) "9"
        ["enviado_operadora"] => string(1) "2"
        ["nao_recebida"] => string(1) "5"
        ["entregue_sem_confirmacao"] => string(2) "10"
        ["entregue_com_confirmacao"] => string(2) "85"
        ["cancelada"] => string(3) "418"
        ["total_enviado"] => string(3) "112"
        ["mes_ano"] => string(10) "Mar / 2018"
        ["opcoes"] => string(217) "<center><a href='/m/03/a/2018' title='Listar'</a></center>"
    }
    [3] => array(10) {
        ["aguardando"] => string(1) "8"
        ["bloqueada"] => string(1) "2"
        ["enviado_operadora"] => string(1) "0"
        ["nao_recebida"] => string(1) "3"
        ["entregue_sem_confirmacao"] => string(2) "15"
        ["entregue_com_confirmacao"] => string(1) "9"
        ["cancelada"] => string(1) "1"
        ["total_enviado"] => string(2) "37"
        ["mes_ano"] => string(10) "Fev / 2018"
        ["opcoes"] => string(217) "<center><a href='/m/02/a/2018' title='Listar'</a></center>"
    }
    [4] => array(10) {
        ["aguardando"] => string(1) "0"
        ["bloqueada"] => string(2) "10"
        ["enviado_operadora"] => string(1) "1"
        ["nao_recebida"] => string(1) "4"
        ["entregue_sem_confirmacao"] => string(2) "15"
        ["entregue_com_confirmacao"] => string(2) "42"
        ["cancelada"] => string(1) "0"
        ["total_enviado"] => string(2) "72"
        ["mes_ano"] => string(10) "Jan / 2018"
        ["opcoes"] => string(217) "<center><a href='/m/01/a/2018' title='Listar'</a></center>"
    }
    [5] => array(10) {
        ["aguardando"] => string(1) "0"
        ["bloqueada"] => string(1) "1"
        ["enviado_operadora"] => string(1) "2"
        ["nao_recebida"] => string(1) "4"
        ["entregue_sem_confirmacao"] => string(1) "3"
        ["entregue_com_confirmacao"] => string(2) "25"
        ["cancelada"] => string(1) "0"
        ["total_enviado"] => string(2) "35"
        ["mes_ano"] => string(10) "Dez / 2017"
        ["opcoes"] => string(217) "<center><a href='/m/12/a/2017' title='Listar'</a></center>"
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, igu disse:

 

Eai Diego

pelo o que eu entendi, você quer efetuar a pesquisa no seu banco de dados e informar no php?

Opa boa tarde!

Não. Eu já tenho a consulta e já listei ela no php através de um array de 32 posições.

Agora tenho que trabalhar em cima desse array de 32 posições para formar um array final de 6 posições, que são elas agrupadas por mes/ano

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
    • Por First
      Olá a todos!
       
      Quando eu tento fazer o login me mostra esse erro "Could not log you in."; Alguém sabe me ajudar a resolver esse problema no meu código?
      <?php require_once("core/init.php"); if (Input::exists()) { if (Token::check(Input::get("token"))) { $validate = new Validate(); $validation = $validate->check($_POST, array( "username" => array("required" => true), "password" => array("required" => true) )); if ($validation->passed()) { $user = new User(); $remember = (Input::get("remember")) === "on" ? true : false; $login = $user->login(Input::get("username"), Input::get("password"), $remember); if ($login) { Session::flash("home", "Welcome back!"); Redirect::to("index.php"); } else { echo "Could not log you in."; } } else { foreach ($validation->errors() as $error) { echo $error."<BR>"; } } } } ?> <form action="" method="POST"> <div class="field"> <label for="username">Username</label> <input type="text" name="username" id="username"> </div> <div class="field"> <label for="password">Password</label> <input type="password" name="password" id="password"> </div> <div class="field"> <label for="remember"> <input type="checkbox" name="remember" id="remember"> Remember me </label> </div> <input type="hidden" name="token" value="<?php echo Token::generate(); ?>"> <input type="submit" value="Log in"> </form>  
       
      Desde já obrigado.
    • Por ckcesar
      Eu tenho uma aplicação no zend com a versão 5.6 e com o postgresql 9.6. Agora eu precisei mudar a versão do meu postgresql para o 16.1, a parte de conexão do bd e consultas sqls funciona perfeitamente, o meu problema está para acessar os meus controllers. Eles não são encontrados em nenhuma rota, quero ver se alguém já passou por esse problema para me ajudar. Obrigado.
    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
×

Informação importante

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