Como percorrer um array e comparar seus valores

3,357 views
Skip to first unread message

Filipe Bicca

unread,
Jul 24, 2010, 11:37:34 PM7/24/10
to listaphp
Boa noite,
estou com uma dúvida que acredito não ser tão complicado.

Tenho um array com dados vindos do bd, ai usei o foreach para percorrer o array:

foreach($dadosBD as $valorBD => $descBD) {
 echo "$descBD<br>"; #lista normalmente todas os dados do array
}

Porém se eu quiser comparar cada valor do array, algo como:

if($dadosBD[0] == "Teste")
       echo "teste";

Tentei ir direto pelo $descBD == mas ele forma um unico valor e dps verifica ..

Tentei usar um for, dando um cont no array mas tb não consegui comparar os valores do array com uma string qualquer ..

Valeu
--
Att.
Filipe Conde Bicca


Filipe Bicca

unread,
Jul 25, 2010, 7:42:29 AM7/25/10
to listaphp
Para entender mais fácil a minha dúvida:

Meu array está assim: Array ( [0] => Supermercado [1] => Casa [2] => Teste )

Formei ele usando explode(",", $valorBD), porém se uso:

if(in_array("Casa", $valorBD))
    echo "Achou";

Ele não acha, essa situação funciona somente se eu fizer um novo array na mão com os valores, existe algum problema com o uso do explode? Alguma coisa eu fiz de errado e não to conseguindo achar =/

Valeu 
Desenvolvimento Web
muitomaisTI - http://www.muitomaisti.net

Beatriz KMS

unread,
Jul 25, 2010, 10:36:50 AM7/25/10
to list...@googlegroups.com
Pode ser que exista alguma espaço em branco nas strings da sua array.
Verifique isso.

Pois se a sua string original era Supermercado, Casa, Teste e vc fez o
explode so com a virgula, suas strings conterão espaços em branco.


2010/7/25 Filipe Bicca <bicca....@gmail.com>:

> --
> ============================================================
> LEIAM SEMPRE AS REGRAS DA LISTA:
> http://groups.google.com.br/group/listaphp/web/regras-da-lista-php
> --
> LISTA PHP > http://groups.google.com.br/group/listaphp
> --
> REVISTA PHP > http://www.revistaphp.com.br
> --
> AJAX-BRASIL > http://groups.google.com/group/ajax-brasil
> --
> PYTHON-GOOGLE > http://groups.google.com.br/group/python-google
> --
> DOTNET-BRASIL > http://groups.google.com.br/group/dotnet_br
> ============================================================

Flavia Missi

unread,
Jul 25, 2010, 10:39:17 AM7/25/10
to list...@googlegroups.com
Cara, tem algum espaço na tua string depois da vírgula? 

Ex: $valorBD = 'Supermercado, Casa, Teste';

Testei aqui dessa forma e pegou os espaços. Dá um var_dump e verifica

--
============================================================
LEIAM SEMPRE AS REGRAS DA LISTA:
http://groups.google.com.br/group/listaphp/web/regras-da-lista-php
--
LISTA PHP > http://groups.google.com.br/group/listaphp
--
REVISTA PHP > http://www.revistaphp.com.br
--
AJAX-BRASIL > http://groups.google.com/group/ajax-brasil
--
PYTHON-GOOGLE > http://groups.google.com.br/group/python-google
--
DOTNET-BRASIL > http://groups.google.com.br/group/dotnet_br
============================================================



--
Flàvia Missi

William G. Comnisky

unread,
Jul 25, 2010, 10:45:29 AM7/25/10
to list...@googlegroups.com
Saudações Filipe,

Tenta assim:
print_r( preg_grep("/teste/", $dadosBD) );



William G. Comnisky
w.com...@gmail.com (Email / MSN / GTalk)
Skype: williamcomnisky
http://blog.will.eti.br
http://duasrodas.will.eti.br




2010/7/25 Flavia Missi <flavi...@gmail.com>

Dyego "NoBe" Andrade

unread,
Jul 27, 2010, 7:49:01 PM7/27/10
to list...@googlegroups.com
foreach($dadosBD as $valorBD => $descBD) {
     // remove os espaços
     $descBD = str_replace(" ", "", $descBD);
     // remove as quebras de linha
     $descBD = str_replace("\r", "", $descBD);
     $descBD = str_replace("\n", "", $descBD);
     echo "$descBD<br>";
}

Depois desses replace tenta fazer a comparação que você precisa!


2010/7/25 William G. Comnisky <w.com...@gmail.com>



--
Atenciosamente,

Dyego de Andrade Vieira
(61) 8402-2046

Rubens Takiguti Ribeiro

unread,
Jul 27, 2010, 9:01:29 PM7/27/10
to list...@googlegroups.com
Para remover espaços e quebras de linha, é mais conveniente usar strtr. Fazer str_replace em cima de str_replace significa percorrer a string várias vezes sem necessidade.

$tr = array(
  ' ' => '',
  "\r" => '',
  "\n" => '',
  "\t" => ''
);

$texto = <<<TEXTO
abc def
ghi
TEXTO;

echo strtr($texto, $tr);

Talvez o problema da comparação seja com letras maiúsculas/minúsculas. Pode usar strcasecmp para comparar strings ignorando a caixa.

if (strcasecmp('A', 'a')) {
   echo 'OK';
}

Note que in_array é case-sensitive.

Rubens Takiguti Ribeiro
TecnoLivre - Cooperativa de Tecnologia e Soluções Livres
Bacharel em Ciência da Computação - UFLA
Zend Certified Engineer - PHP 5

Dyego "NoBe" Andrade

unread,
Jul 28, 2010, 10:55:18 AM7/28/10
to list...@googlegroups.com
Legal Rubens, sempre fiz str_replace em cima de str_replace, vou passar a usar o strtr! Obrigado pela sugestão!

Abraço!


2010/7/27 Rubens Takiguti Ribeiro <rub...@gmail.com>
Reply all
Reply to author
Forward
0 new messages