foreach - Dúvida básica

ThatsMe

Portugal@Home Member
Viva.

Estou com uma quase paragem cerebral neste momento, por isso acredito que isto seja a dúvida mais vergonhosa que alguma vez porei na minha vida.

Tenho um array associativo em PHP que visa manter registado (numa cookie) o termo que foi pesquisado e o número de vezes que esse mesmo termo foi pesquisado pelo utilizador. Ou seja:

[Cidade pesquisada => N vezes (igual ou superior a 1)]

Ficando, por exemplo, com a seguinte estrutura:

[porto => 2]
[lisboa => 6]
[braga => 1]

O que eu pretendo é, ao ser feita uma pesquisa, correr todo o array para verificar se a cidade alguma vez foi pesquisada. Se sim, é incrementado 1 ao valor. Se não, a pesquisa é adicionada no final do array com o value 1.

Assim sendo, se a pesquisa for "lisboa", o array ficará assim:

[porto => 2]
[lisboa => 7]
[braga => 1]

Se a pesquisa for "algarve":

[porto => 2]
[lisboa => 6]
[braga => 1]
[algarve => 1]


Até ao momento tenho isto, mas estou completamente encravado porque não consigo arranjar uma forma de, caso a pesquisa não esteja no array, a adicionar no fim.

PHP:
foreach ($cookie_val as $key => $value) {
 if($search == $key){
 //caso a pesquisa já exista
  $value++;
 }
 else{
  
 }

Creio que a parte inicial está correta, caso o valor de $search seja igual à key (cidade), vai incrementar o value. O problema é quando a cidade não está no array... Devo trabalhar com um booleano para poder saber, no final do foreach, se a cidade foi ou não encontrada?

Obrigado, desde ja.
 
Põe um "break;" dentro do "if", depois de incrementares o value. Depois do "if" acrescentas a chave ao array. Só chegas lá se nenhuma das chaves fizer match, como se pretende.
 
Põe um "break;" dentro do "if", depois de incrementares o value. Depois do "if" acrescentas a chave ao array. Só chegas lá se nenhuma das chaves fizer match, como se pretende.

PHP:
foreach ($cookie_val as $key => $value) {
if($search == $key){
//caso a pesquisa já exista
  $value++;
  break;
}
//adicionar valor ao array.
}

Isto, certo?

EDIT: Não, não pode ser isto... Em cada uma das chaves ele vai entrar no if e, como não vai haver ocorrência, vai adicionar o valor ao array. Estou confuso outra vez! lol
 
Sim, claro, tens razão. Tinhas a ideia certa na pergunta original, quando perguntaste pelo booleano. Dentro do if pões esse booleano True se houver um match, e depois do foreach acrescentas a chave nova se o booleano for False.

EDIT: Já agora, tens mesmo de fazer o foreach? Não programo em PHP, mas não há maneira de simplesmente perguntar ao array se a chave existe? Se existir incrementa-se o valor, se não acrescenta-se.
 
Não tinha reparado no edit e sim, acabei de editar tudo e a tua sugestão funciona às mil maravilhas.

Não conhecia essa função, obrigado pela fica.
 
acho que para o que tu queres nem precisavas do array_key_exists, nem do foreach.

Sera que somente:

$cookie_val[$search] = $cookie_val[$search]+1;

não abrange todos os casos?
 
Funciona mas queixa-se de warning quando tenta somar o +1

array_key_exists($search, $cookie_val) ? $cookie_val[$search]++ : $cookie_val[$search] = 1;

isto serve. o $cookie_val[$search] tanto pode ficar fora do ?: ou como esta em cima vai dar ao mesmo...
 
Back
Topo