Como verificar se existe um valor de array?

109

Como posso verificar se $something['say']tem o valor de 'bla'ou 'omg'?

$something = array('say' => 'bla', 'say' => 'omg');
Uffo
fonte
45
As chaves em uma matriz devem ser exclusivas.
Gumbo

Respostas:

113

Usando if?

if(isset($something['say']) && $something['say'] == 'bla') {
    // do something
}

A propósito, você está atribuindo um valor com a chave sayduas vezes, portanto, sua matriz resultará em uma matriz com apenas um valor.

Tatu Ulmanen
fonte
289

Você poderia usar a função PHP in_array

if( in_array( "bla" ,$yourarray ) )
{
    echo "has bla";
}
Benjamin Ortuzar
fonte
7
É possível ter um array com chaves idênticas? O segundo valor não substituiria o original?
Citricguy
47

Usando: in_array()

$search_array = array('user_from','lucky_draw_id','prize_id');

if (in_array('prize_id', $search_array)) {
    echo "The 'prize_id' element is in the array";
}

Aqui está o resultado: The 'prize_id' element is in the array


Usando: array_key_exists()

$search_array = array('user_from','lucky_draw_id','prize_id');

if (array_key_exists('prize_id', $search_array)) {
    echo "The 'prize_id' element is in the array";
}

Sem saída


Em conclusão, array_key_exists()não funciona com um array simples. É apenas para descobrir se existe ou não uma chave de array. Use em seu in_array()lugar.

Aqui está mais um exemplo:

<?php
/**++++++++++++++++++++++++++++++++++++++++++++++
 * 1. example with assoc array using in_array
 *
 * IMPORTANT NOTE: in_array is case-sensitive
 * in_array — Checks if a value exists in an array
 *
 * DOES NOT WORK FOR MULTI-DIMENSIONAL ARRAY
 *++++++++++++++++++++++++++++++++++++++++++++++
 */
$something = array('a' => 'bla', 'b' => 'omg');
if (in_array('omg', $something)) {
    echo "|1| The 'omg' value found in the assoc array ||";
}

/**++++++++++++++++++++++++++++++++++++++++++++++
 * 2. example with index array using in_array
 *
 * IMPORTANT NOTE: in_array is case-sensitive
 * in_array — Checks if a value exists in an array
 *
 * DOES NOT WORK FOR MULTI-DIMENSIONAL ARRAY
 *++++++++++++++++++++++++++++++++++++++++++++++
 */
$something = array('bla', 'omg');
if (in_array('omg', $something)) {
    echo "|2| The 'omg' value found in the index array ||";
}

/**++++++++++++++++++++++++++++++++++++++++++++++
 * 3. trying with array_search
 *
 * array_search — Searches the array for a given value 
 * and returns the corresponding key if successful
 *
 * DOES NOT WORK FOR MULTI-DIMENSIONAL ARRAY
 *++++++++++++++++++++++++++++++++++++++++++++++
 */
$something = array('a' => 'bla', 'b' => 'omg');
if (array_search('bla', $something)) {
    echo "|3| The 'bla' value found in the assoc array ||";
}

/**++++++++++++++++++++++++++++++++++++++++++++++
 * 4. trying with isset (fastest ever)
 *
 * isset — Determine if a variable is set and 
 * is not NULL
 *++++++++++++++++++++++++++++++++++++++++++++++
 */
$something = array('a' => 'bla', 'b' => 'omg');
if($something['a']=='bla'){
    echo "|4| Yeah!! 'bla' found in array ||";
}

/**
 * OUTPUT:
 * |1| The 'omg' element value found in the assoc array ||
 * |2| The 'omg' element value found in the index array ||
 * |3| The 'bla' element value found in the assoc array ||
 * |4| Yeah!! 'bla' found in array ||
 */
?>

Aqui está PHP DEMO

Neeraj Singh
fonte
array_key_exists()verifica as chaves de array, enquanto o último $search_arraycontém array associativo. Sem dúvida não funcionará. Você deve array_flip()primeiro.
Chay22
7

Você pode usar:

Jasir
fonte
6

Para verificar se o índice está definido: isset($something['say'])

eco
fonte
Eu não entendo a intenção dessa resposta. Como atingir o objetivo de verificar o valor de um índice?
Brad Koch
Boa pergunta. Isso não responde à pergunta de forma alguma, como está escrito. Não me lembro, mas como respondi cerca de 3 minutos depois que a pergunta foi feita originalmente, acho que o OP editou sua pergunta original para torná-la mais clara, dentro do corte de edição inicial antes de ser registrada como uma edição. Se isso faz algum sentido.
echo
5

Você pode testar se um array tem um certo elemento ou não com isset () ou às vezes até melhor array_key_exists () (a documentação explica as diferenças). Se você não tiver certeza se o array possui um elemento com o índice 'diga', você deve testar isso primeiro ou poderá receber mensagens de 'aviso: índice indefinido ....'.

Quanto ao teste se o valor do elemento é igual a uma string, você pode usar == ou (novamente às vezes melhor) o operador de identidade === que não permite malabarismo de tipo .

if( isset($something['say']) && 'bla'===$something['say'] ) {
  // ...
}
VolkerK
fonte
array_key_exists é sempre a melhor solução
AjayR
5

in_array () está bem se você estiver apenas verificando, mas se precisar verificar se existe um valor e retornar a chave associada, array_search é uma opção melhor.

$data = [
    'hello',
    'world'
];

$key = array_search('world', $data);

if ($key) {
    echo 'Key is ' . $key;
} else {
    echo 'Key not found';
}

Isso imprimirá "Chave é 1"

Tom Jowitt
fonte
3

Basta usar a função PHP array_key_exists()

<?php
$search_array = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search_array)) {
    echo "The 'first' element is in the array";
}
?>
Xman Classical
fonte
3
<?php
if (in_array('your_variable', $Your_array)) {
    $redImg = 'true code here';
} else {
    $redImg = 'false code here';
} 
?>
Vishnu Sharma
fonte
1
Uma resposta melhor geralmente contém uma explicação além do código. Acredito que fazer isso melhorará sua resposta!
Amit
1

Bem, primeiro um array associativo só pode ter uma chave definida uma vez, então esse array nunca existiria. Caso contrário, use apenas in_array()para determinar se esse elemento específico da matriz está em uma série de soluções possíveis.

animuson
fonte
1
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

Outro uso de in_array in_array () com um array como agulha

<?php
$a = array(array('p', 'h'), array('p', 'r'), 'o');

if (in_array(array('p', 'h'), $a)) {
    echo "'ph' was found\n";
}

if (in_array(array('f', 'i'), $a)) {
    echo "'fi' was found\n";
}

if (in_array('o', $a)) {
    echo "'o' was found\n";
}
?>
Ahmad Sayeed
fonte
1

Supondo que você esteja usando uma matriz simples

. ie

$MyArray = array("red","blue","green");

Você pode usar esta função

function val_in_arr($val,$arr){
  foreach($arr as $arr_val){
    if($arr_val == $val){
      return true;
    }
  }
  return false;
}

Uso:

val_in_arr("red",$MyArray); //returns true
val_in_arr("brown",$MyArray); //returns false
Kareem
fonte