Ir para conteúdo

POWERED BY:

Arquivado

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

montano

foreach

Recommended Posts

boa tarde,

 

como eu posso fazer para saber se uma palavra ja existe em um array.

 

por exemplo:

 

$novoProduto = 'camisa';

$produto[1] = camisa;

$produto[2] = calça;

 

no caso eu quero fazer um laço que compare todas posiçoes do array com uma variavel.

se existe ignora, se nao existe inserir no array a palavra. Eu posso fazer com foreach? como ficaria mais ou menos nao consegui entender direito o foreach.

 

vlw pessoal

Compartilhar este post


Link para o post
Compartilhar em outros sites

como eu posso fazer para saber se uma palavra ja existe em um array.

 

por exemplo:

 

$novoProduto = 'camisa';

$produto[1] = camisa;

$produto[2] = calça;

 

no caso eu quero fazer um laço que compare todas posiçoes do array com uma variavel.

se existe ignora, se nao existe inserir no array a palavra. Eu posso fazer com foreach? como ficaria mais ou menos nao consegui entender direito o foreach.

 

Bom, dependendo da sua aplicação o ideal é utilizar uma matriz associativa auxiliar, mas você pode utilizar também in_array

 

$arr = array();
$arr[] = "camisa";
$arr[] = "calça";

$verifica = "teste";

if ( !in_array( $verifica , $arr ) ){
    $arr[] = $verifica;
}

var_dump( $arr );

if ( !in_array( $verifica , $arr ) ){
    $arr[] = $verifica;
}

var_dump( $arr );

A saída deverá ser:

 

array(3) {
  [0]=>
  string(6) "camisa"
  [1]=>
  string(5) "calça"
  [2]=>
  string(5) "teste"
}
array(3) {
  [0]=>
  string(6) "camisa"
  [1]=>
  string(5) "calça"
  [2]=>
  string(5) "teste"
}

Mas essa verificação é lenta, então, dependendo do que você for fazer é altamente recomendável utilizar uma matriz associativa para essa verificação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma outra forma de se fazer é assim:

 

$novoProduto = 'camisa';
 $produto[] = 'camisa';
 $produto[] = 'calça';

if (array_search($novoProduto, $produto) === false) {
  $produto[] = $novoProduto;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, vou sugerir uma leitura..

http://br.php.net/manual/pt_BR/book.array.php

 

Tem várias funções que podem fazer o que você quer... Por exemplo, você pode inserir e depois usar array_unique para tirar os repetidos.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, vou sugerir uma leitura..

http://br.php.net/manual/pt_BR/book.array.php

 

Tem várias funções que podem fazer o que você quer... Por exemplo, você pode inserir e depois usar array_unique para tirar os repetidos.

 

Carlos Eduardo

 

eu ja utilizei o array_unique e nao vi ferramenta melhor, e que seja mais rapida para tirar elementos repetidos dentro de um array.

 

Porem se eu quiser retirar os elementos repetidos e motrar na tela os repetidos, tem como fazer? (usando array_unique) obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim... usa array_intersect para mostrar os repetidos e depois usa o array_unique. Não deixe de olhar o link que mandei antes. Não precisa entrar em todas as funções... leia a descrição delas que já resolve.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

class Exemplo {
public $situacoes_geral;


function situacoesGeral($situacao,$qtsituacao){
	if (array_search($situacao, $situacoes_geral) === false) {
   $situacoes_geral[] = $situacao;
        }
}

}

eu to tentando fazer assim: soh que junto com o nome da situacao tem a quantidade de item por situacao. soh para voces ficarem por dentro, isso eu estou fazendo porque eu tenho 5 BD´s, cada um com 1 tb_contratos que tem 1 campo 'situacao'. digamos eu tenho no BD 1: 3 situacoes X e 2 Y, no BD 2: 1 situacoes X. e assim por diante..

 

eu preciso agrupar as situaçoes somando os valores. soh que sao de 5 BD´s diferentes. eu uso um objeto para cada BD.

 

eu acho que a maneira mais certa a fazer esse agrupamento, é por um array, mas nao tem como fazer isso com um SELECT COUNT soh que um SELECT que varra 5 BD´s diferentes ?

 

valeu pela ajuda, estou lendo os links enviados. abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

sao 5 Banco de Dados.

 

cada um com 1 tb_contratos.Nessa tabela contrato tem um campo situacao.

 

Eu tenho no BD1 5 linhas da tb_contratos, uma com o campo situacao preenchido com X e 4 com Y, e assim nos outros 4 BD´s.

 

 

eu preciso ler esses 5 Banco de Dados, contando quantas tem com situacao X e quantas com situacao Y. agrupando por situacao.

 

se fosse com 1 BD eu faria..

 

SELECT COUNT (cod) from tb_situacao GROUP BY situacao ASC

 

mas o problema é que eu preciso fazer isso em 5 BD´s diferentes..

Compartilhar este post


Link para o post
Compartilhar em outros sites

sao 5 Banco de Dados.

cada um com 1 tb_contratos.Nessa tabela contrato tem um campo situacao.

Eu tenho no BD1 5 linhas da tb_contratos, uma com o campo situacao preenchido com X e 4 com Y, e assim nos outros 4 BD´s.

 

eu preciso ler esses 5 Banco de Dados, contando quantas tem com situacao X e quantas com situacao Y. agrupando por situacao.

 

Você faz a mesma coisa, só que adicionando a referência ao banco de dados:

 

 

Criando os banco de dados:

mysql> create schema `bd1`;
Query OK, 1 row affected (0.00 sec)

mysql> create schema `bd2`;
Query OK, 1 row affected (0.00 sec)

mysql> create schema `bd3`;
Query OK, 1 row affected (0.00 sec)

Criando as tabelas:

mysql> create table `bd1`.`tabela` (
    ->   `id` mediumint(8) unsigned not null auto_increment,
    ->   `nome` varchar(20) not null,                       
    ->   `situacao` enum('X','Y') not null default 'X',     
    ->   primary key(`id`),                                 
    ->   key `situacao`(`situacao`)                         
    -> ) engine=MySQL;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> create table `bd2`.`tabela` (
    ->   `id` mediumint(8) unsigned not null auto_increment,
    ->   `nome` varchar(20) not null,
    ->   `situacao` enum('X','Y') not null default 'X',
    ->   primary key(`id`),
    ->   key `situacao`(`situacao`)
    -> ) engine=MySQL;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> create table `bd3`.`tabela` (
    ->   `id` mediumint(8) unsigned not null auto_increment,
    ->   `nome` varchar(20) not null,
    ->   `situacao` enum('X','Y') not null default 'X',
    ->   primary key(`id`),
    ->   key `situacao`(`situacao`)
    -> ) engine=MySQL;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

Agora inserindo alguns valores:


mysql> insert into `bd1`.`tabela`(`nome`,`situacao`) values ( 'Teste 1 bd1' , 'X' ),( 'Teste 2 bd1' , 'Y' ),( 'Teste 3 bd1' , 'X' );
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into `bd2`.`tabela`(`nome`,`situacao`) values ( 'Teste 1 bd2' , 'X' ),( 'Teste 2 bd2' , 'Y' );
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into `bd3`.`tabela`(`nome`,`situacao`) values ( 'Teste 1 bd3' , 'X' ),( 'Teste 2 bd3' , 'Y' );
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

Agora fazendo a consulta:

 

mysql> select
    ->   (select
    ->     count(*) + 
    ->     (select count(*) from `bd2`.`tabela` t2 where ( t2.`situacao` = 'X' )) +
    ->     (select count(*) from `bd3`.`tabela` t3 where ( t3.`situacao` = 'X' ))
    ->   from
    ->     `bd1`.`tabela` t1
    ->   where
    ->     ( t1.`situacao` = 'X' )) "TotalX",
    ->   (select
    ->     count(*) +
    ->     (select count(*) from `bd2`.`tabela` t2 where ( t2.`situacao` = 'Y' )) +
    ->     (select count(*) from `bd3`.`tabela` t3 where ( t3.`situacao` = 'Y' ))
    ->   from
    ->     `bd1`.`tabela` t1
    ->   where
    ->     ( t1.`situacao` = 'Y' )) "TotalY";
+--------+--------+
| TotalX | TotalY |
+--------+--------+
|      4 |      3 |
+--------+--------+
1 row in set (0.00 sec)

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, valeu pela ajuda, mas nao sei se você entendeu bem, ou eu que nao to entendendo seu codigo.

 

eu ja tenho as tabelas e os bds criados, aquele seu select onde que é identificado qual Banco de Dados ele ta selecionando?

 

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, entendi, e isso tem como ser feito nos 5 bd´s ao mesmo tempo? fazendo GROUP BY situacao?

select count(*) from `bd2`.`tabela` t2 where ( t2.`situacao` = 'X'// onde bd2 é o nome do banco.

no caso do seu exemplo eu estou contando soh do bd2 correto? , teria como contar do bd1,bd2,bd3,bd4,bd5 fazendo GROUP BY situacao em todos junto?

 

 

valeuu

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, entendi, e isso tem como ser feito nos 5 bd´s ao mesmo tempo? fazendo GROUP BY situacao?

 

no caso do seu exemplo eu estou contando soh do bd2 correto? , teria como contar do bd1,bd2,bd3,bd4,bd5 fazendo GROUP BY situacao em todos junto?

 

No caso do exemplo que eu passei a contagem é feita nos bancos de dados `bd1`, `bd2` e `bd3`:

 

mysql> select
    ->   (select
    ->     count(*) + 
    ->     (select count(*) from `bd2`.`tabela` t2 where ( t2.`situacao` = 'X' )) +
    ->     (select count(*) from `bd3`.`tabela` t3 where ( t3.`situacao` = 'X' ))
    ->   from
    ->     `bd1`.`tabela` t1
    ->   where
    ->     ( t1.`situacao` = 'X' )) "TotalX",
    ->   (select
    ->     count(*) +
    ->     (select count(*) from `bd2`.`tabela` t2 where ( t2.`situacao` = 'Y' )) +
    ->     (select count(*) from `bd3`.`tabela` t3 where ( t3.`situacao` = 'Y' ))
    ->   from
    ->     `bd1`.`tabela` t1
    ->   where
    ->     ( t1.`situacao` = 'Y' )) "TotalY";
+--------+--------+
| TotalX | TotalY |
+--------+--------+
|      4 |      3 |
+--------+--------+
1 row in set (0.00 sec)

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.