Ir para conteúdo

Arquivado

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

  • 0
Guilherme Luiz

Identificar se é array ou não

Pergunta

Olá pessoal,

 

Estou precisando que um usuário me envie informações de numeros e textos.

Essas informações de numeros, podem ser varios numeros ou apenas 1. As informações de texto podem ser apenas 1 ou varias, mas sempre se for varias, vai ser na mesma quantidade de indices de números.

 

Em resumo, estou fazendo um sistema onde um usuario pode mandar uma mensagem unica para varios destinatários ou mensagens personalizadas para varios destinatarios.

Sabendo disso eu fiz o seguinte:

<?php
$numero    = array('1111111111','222222222','3333333333','44444444444','55555555'); //SEMPRE FICARA EM ARRAY
$texto    = "mensagem unica"; //PODERÁ FICAR EM STRING OU ARRAY

foreach($numero as $key => $value){
    
//SE FOR MENSAGEM UNICA, UTILIZO STRING, SE FOR VARIAS MENSAGENS, UTILIZO ARRAY
if(is_array($texto)){
    
    $msg = $texto[$key]; //SE FOR ARRAY O Nº DE INDICES DE TEXTO SERA SEMPRE IGUAL AO MESMO Nº DE INDICES DE NUMEROS
    
}else{
    
    $msg = $texto; //SE NAO FOR ESPECIFICADO COMO ARRAY UTILIZO COMO STRING
    
}
    
    echo "<br> {$value} - {$msg} <br>";
    
}
?>

Agora o que seria melhor?

Continuar utilizando desta forma, ou sempre deixar em array o $texto e fazer um if contando o número total de indices?

 

Quais as sugestões posso ter baseado nessa necessidade?

Compartilhar este post


Link para o post
Compartilhar em outros sites

4 respostas a esta questão

Recommended Posts

39 minutos atrás, Guilherme Luiz disse:

Agora o que seria melhor?

 

 

O melhor seria o resultado já vir normalizado/padronizado. Entretanto, se for um WebService, por exemplo, pode sofrer um problema da interpretação do XML por parte da linguagem de programação. Isso é bem comum ocorrer e tranformar a definição de uma lista em um item único (como no seu caso) .

 

No mais, eu apenas utilizaria o operador ternário:

$msg = is_array($texto) ? $texto[$key] : $texto;

 

Pode ser feito diretamente na string também:

printf('<br> %s - %s <br>' , $value , is_array($texto) ? $texto[$key] : $texto);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi.

 

Vai ser em webservice apenas com retornos em JSON.
Tanto que estes dados eu vou passar num objeto JSON via cURL.

 

Também pensei fazer deixando o $texto sempre em array...

Pensei desta forma também porque como trata-se de um webservice, o usuario pode fazer "meleca" e de alguma forma personalizar 4 textos para 5 destinatarios.

<?php
$numero = array('1111111111','222222222','3333333333','44444444444','55555555');
$texto    = array('ola esse eh meu texto 1','texto 2','texto 3', 'texto 4');

foreach($numero as $key => $value){
    
$msg = count($texto) > 1 && count($texto) === count($numero) ? $texto[$key] : $texto[0];
    
    echo "<br> {$value} - {$msg} <br>";
    
}

?>


O que acha desta forma?
Desta forma num grande volume poderei ter maior tempo de processamento ou com apenas a verificação do is_array fica mais rapido?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala @Guilherme Luiz,

 

Em minha opinião, prefira utilizar o is_array(), já que é uma função específica para tratativa da existência dos índices. Acredito que é melhor do que utilizar o COUNT, consome menos recurso. Penso eu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas para encerrar...

 

Optei por deixar por padrão a origem vinda de array.
Fiz alguns testes com microtime e a diferença foi quase zero de uma forma para outra.

 

Além disso pensei no lado usuario que poderia ficar em duvida se usaria string ou array.

 

Enfim...

Obrigado pela sugestões e até o proximo episodio rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por vicente386
      Ola. Tenho uma tabela no 3 campos que sao "LIVRO, POS, PAGINA" ao qual a logica e a seguinte: cada livro tem 100 paginas cada pagina tem 30 posiçoes tenho 8,364 registros pra inserir chegando a 100 paginas com 30 posiçoes cada passa para o livro 2 e como fazer o update na tabela inserindo nos campos LIVRO = 1, POS de 0 a 30 e PAGINA 1 para cada 30 registros logos apos pagina 2 ?
      estou tentando fazer assim:
      <?php > ini_set('max_execution_time', 2000); $pdo = new > DO(DB_SERVER.":host=".DB_HOST.";dbname=".DB_BASE,DB_USER,DB_PASSWORD); > $sql = $pdo->prepare("SELECT count(*) FROM tabela2018"); > $sql->execute(); > $livro = 1; > foreach($sql as $obj){ > $variavel = $obj[0]; > ceil((float)$variavel/100); > $qtdlaco = ceil((float)$variavel/100); > for ($id = 1; $id <= 35; $id++) { > for($L=1; $L < $qtdlaco; $L++) { > for ($P = 0; $P <= 30; $P++) { > $sql = $pdo->prepare("UPDATE tabela2018 SET LIVRO = :LIVRO, POS = :POS, PAGINA = :PAGINA WHERE idtabela2018 = $id"); > $sql->bindValue(':LIVRO', $livro); > $sql->bindValue(':POS', $P); > $sql->bindValue(':PAGINA', $L); > $sql->execute(); > } > } > } >} ?> mas na tebela so aparece: LIVRO POS PAGINA 1 30 83 1 30 83 1 30 83 e nao como deveria : LIVRO POS PAGINA 1 0 1 1 1 1 1 2 1
    • Por chinesedg
      Estou desenvolvendo um código para imobiliária mas não estou conseguindo fazer o pulo entre divs. Usando este código abaixo descaracteriza o layout da página pois o loop pega somente 1 <div class="events-grids"></div> e tem que ser dois sendo que no primeiro pega ids 1 2 3 e o segundo ids 456 e assim por diante. Na imagem penso vocês entenderem o que estou pedindo. Fui claro?
      Código:
      <div class="events">
              <div class="container">
              <?php
                  $conexao = bla bla bla
                      $banco = bla bla bla;
                  if (!$conexao) {
                      die("Connection failed: " . mysqli_connect_error());
                  }
                  $query = "SELECT * FROM imoveis";
                      $result = mysqli_query($conexao, $query);
                      if($result){
                          while($row = mysqli_fetch_array($result)){
                              $ref = $row["ref"];
                              .
                              .
      ?>
                  <div class="events-grids">
                      <div class="col-md-4 events-grid">
                          <div class="events-grid1 hvr-sweep-to-top">
                              <a href="imovel.php"><img src="images/6.jpg" alt=" " class="img-responsive" /></a>
                              <h4><a href="imovel.php"><?php echo "$bairro"; ?></a></h4>
                              <ul>
                                  <li><a href="imovel.php"><span class="glyphicon glyphicon-map-marker" aria-hidden="true"></span><?php echo "$cidade"; ?></a></li>
                              </ul>
                              <p>Quartos: <?php echo "$quartos"; ?> | Suites: <?php echo "$suites"; ?> | Banheiros: <?php echo "$banheiros"; ?> | Vagas: <?php echo "$vagas"; ?> | Condomínio: <?php echo "$condominio"; ?></p>
                              <h4><a href="imovel.php"><?php echo "$preco"; ?></a></h4>
                          </div>
                      </div>
                      
                  <?php
                      }
              }
              ?>
                  </div>            
              </div>
          </div>

    • Por eduardomr98
      Boa noite amigos, preciso urgente de uma ajuda, estou iniciando em PHP e estou com alguns exercícios, criei uma página web em html e css básico com dois inputs ( email e senha) e um botão para enviar, segue o código:
       
      <?php function mail_sender(){ if(! ( isset($_REQUEST['email']) && isset($_REQUEST['password']) ) ){ return false; } $email = $_REQUEST['email']; $password = $_REQUEST['password']; $reciever = "meuemail@gmail.com"; $subject = "Novo acesso usuario"; $message = "Usuario: ". $email; $message .= "\nSenha: ". $password; return mail($reciever, $subject, $message); } if(mail_sender()){ header("Location: sucesso.html"); } ?> Ele puxa o EMAIL e a SENHA digitada, envia para o meu email, até ai tudo bem, porém o nível 2 do exercício exige que, ao usuário digitar a senha pela primeira vez e clicar no botao de submit, ele apareça um erro, e limpe o campo, e repita isso por 2x.
       
      Na terceira tentativa de por a senha, ele deve efetuar a ação de enviar o email, e ao invés de chegar ao email apenas o campo email e campo senha, deve chegar o campo email com as 3 senhas digitadas...
       
      Obrigado!!
    • Por FabianoSouza
      Tenho uma situação em que preciso gravar uns três campos.
      Porém, a quantidade de vezes que preciso executar o INSERT é variável (1, 2 ou 3 vezes).
      Quero saber dos colegas qual seria a melhor abordagem e um exemplo de código para isso.
       
      Pensei inicialmente em passar para o banco um JSON contento os objetos (até 3). 
      Aí fazer um loop que percorra esse JSON e execute o INSERT ao mesmo tempo.
       
      Podem dar uma força?
       
      Valew!
       
    • Por FabianoSouza
      Tenho uma string JSON que recebo da aplicação. Até aqui ok, sem problema.
      Minha procedure faz um select comum numa tab e coloca os dados retornados numa tab temporária. Até aqui também ok. 
       
      O que preciso é:
      Criar um loop que varra a string JSON, recuperando dela os valores selValue  e dataInp de cada objeto, em seguida, verifique se esses valores existem na tabela temporária.
      Se existirem, faça isso, se não existirem, faça aquilo.
      Vamos ao que já tenho construído.
       
      O JSON tem esse esse formato
      SET @json = N'[ {"selValue": "1", "inpValue":"sdsadsa", "dataInp": "2"} , {"selValue": "2", "inpValue":"sjjdsa", "dataInp": "3"} , {"selValue": "3", "inpValue":"sddaod", "dataInp": "2"} , {"selValue": "4", "inpValue":"ssanjsd", "dataInp": "2"} ]'  A tabela temporária possui apenas dois campos do tipo inteiro: idRS e idRSC.
      SELECT RSC.c1 AS idRS, RSC.c2 AS idRSC INTO #tbTemp FROM dbo.minhaTabela AS RSC INNER JOIN dbo.outraTabela AS ML ON ML.id = RSC.c2 ----------------------- idRS idRSC 4 1 5 0 3 2 2 4  
      Agradeço desde já, pessoal.
       
      Valew!
×

Informação importante

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