← PHP

Como comparar string dentro de um array?

Lida 4190 vezes

Offline

bonsempregos 
Membro
Mensagens 2008 Gostos 7
Feedback +3

Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Olá, preciso de uma ajuda aqui da comunidade.

Tenho o seguinte caso:

Tenho um ficheiro onde preciso de verificar se cada linha tem determinado nome e caso esse nome exista ele altere essa linha para outro nome especifico.

A forma mais simples que eu vejo é ter um ficheiro externo já mapeado como por exemplo:

Código: [Seleccione]
Bananas => Bananas Amarelas
Morangos => Morangos Vermelhos
Pepinos => Pepinos Verdes
Maçã => Maçã amarela

Imaginando que tenho este ficheiro original:

Código: [Seleccione]
Banas Amarelas
Morangos
Maçã
Peninos Verdes

Como posso obter este resultado?

Código: [Seleccione]
Bananas Amarelas
Morangos Vermelhos
Pepinos Verdes
Maçã amarela

Apenas preciso de saber como posso verificar através do ficheiro de "mapeamento" (quem diz um ficheiro, diz outro objecto qualquer). O que me está a faltar é a lógica para comparar isto.

Aqui simplifiquei e apenas coloquei 4 campos que facilmente se fazia com um if then, mas na realidade cada file tem milhares de strings, dai usar o file de mapeamento.

Se alguem puder colocar um snippet agradeço imenso.
Offline

Bruno Gaspar 
Membro
Mensagens 242 Gostos 1
Feedback +3

Troféus totais: 18
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 3 Level 2 Level 1 100 Posts 50 Posts 10 Posts

Não tendo código de como estás a fazer é mais complicado, mas o in_array não faz o que pretendes ? Penso que estejas a fazer em PHP claro.
Offline

bonsempregos 
Membro
Mensagens 2008 Gostos 7
Feedback +3

Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Sim é php.

Tentando explicar um pouco melhor é algo semelhante a que qualquer modulo de l10n (localization) faz.

Ou seja tem um ficheiro/db/whatever com a tradução da linguagem e depois quando encontra uma string num texto vai a esse ficheiro/db/whatever modifica esse string.

Ps: Cheguei a esta conclusão agorinha depois de postar, vou tentar perceber ai no varios repositorios de open source de como fazem, no entanto se alguem tiver o "básico" era mais fácil de entender :)

Quando ao código, infelizmente, ainda não tenho nada.
Offline

bonsempregos 
Membro
Mensagens 2008 Gostos 7
Feedback +3

Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Em principio isto deve fazer o que prendendo:

(encontrado em: http://www.php.net/manual/en/function.in-array.php#89449 )

Código: [Seleccione]
<?php
  
function myInArray($array$value$key){
    
//loop through the array
    
foreach ($array as $val) {
      
//if $val is an array cal myInArray again with $val as array input
      
if(is_array($val)){
        if(
myInArray($val,$value,$key))
          return 
true;
      }
      
//else check if the given key has $value as value
      
else{
        if(
$array[$key]==$value)
          return 
true;
      }
    }
    return 
false;
  }
?>

Obrigado pela dica do in_array Bruno Gaspar
Offline

Bruno Gaspar 
Membro
Mensagens 242 Gostos 1
Feedback +3

Troféus totais: 18
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 3 Level 2 Level 1 100 Posts 50 Posts 10 Posts

Experimenta, se não der tenta explicar um pouco melhor o que pretendes é que fiquei um pouco confuso =D
Offline

bonsempregos 
Membro
Mensagens 2008 Gostos 7
Feedback +3

Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Sim, vou experimentar, mas em principio é isto mesmo.

Tenho um valor:

$x= 'bananas';
$array = array(
'bananas' => 'bananas amarelas',
'morangos' => 'morangos vermelhos'
);
 
ele vai procurar no array por "bananas", ao encontrar a key bananas em vez de retornar TRUE como está ai no snippet vou colocar a retornar o valor.
Offline

bonsempregos 
Membro
Mensagens 2008 Gostos 7
Feedback +3

Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Ok, não dava, acabei por fazer isto:

Código: [Seleccione]
$x ='bananas amarelas';
$array = array(
'bananas' => 'bananas amarelas',
'morangos' => 'morangos vermelhos'
);

$key = array_search($x, $array);

echo $key;

resultado: bananas
Offline

Emanuel Santos 
Elite
Mensagens 848 Gostos 2
Feedback +25

Troféus totais: 25
Trófeus: (Ver todos)
Windows User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1

A função str_replace também suporta arrays, consulta o primeiro exemplo: http://php.net/manual/en/function.str-replace.php
Offline

bonsempregos 
Membro
Mensagens 2008 Gostos 7
Feedback +3

Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Obrigado Tom Strong