Come verificare se esiste un valore di matrice?


109

Come posso verificare se $something['say']ha il valore 'bla'o 'omg'?

$something = array('say' => 'bla', 'say' => 'omg');

45
Le chiavi in ​​un array devono essere univoche.
Gumbo

Risposte:


113

Usando if?

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

A proposito, stai assegnando un valore con la chiave saydue volte, quindi il tuo array risulterà in un array con un solo valore.


289

Potresti usare la funzione PHP in_array

if( in_array( "bla" ,$yourarray ) )
{
    echo "has bla";
}

7
È possibile avere un array con chiavi identiche? Il secondo valore non sovrascriverebbe l'originale?
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";
}

Ecco l'output: 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";
}

Nessuna uscita


In conclusione, array_key_exists()non funziona con un semplice array. È solo per scoprire se esiste o meno una chiave di matrice. Usoin_array() invece.

Ecco un altro esempio:

<?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 ||
 */
?>

Qui è PHP DEMO


array_key_exists()controlla le chiavi dell'array mentre quest'ultimo $search_arraycontiene l'array associativo. Senza dubbio non funzionerà. Dovresti array_flip()prima.
Chay22


6

Per verificare se l'indice è definito: isset($something['say'])


Non capisco lo scopo di questa risposta. Come si raggiunge l'obiettivo di verificare il valore di un indice?
Brad Koch

Buona domanda. Questo non risponde affatto alla domanda, come è scritto. Non ricordo, ma dal momento che ho risposto circa 3 minuti dopo che la domanda era stata inizialmente posta, immagino che l'OP abbia modificato la domanda originale per renderla più chiara, entro il limite di modifica iniziale prima che venga registrata come modifica. Se questo ha un senso.
eco

5

Puoi verificare se un array ha o meno un certo elemento con isset () o talvolta anche meglio con array_key_exists () (la documentazione spiega le differenze). Se non puoi essere sicuro che l'array abbia un elemento con l'indice 'say' dovresti prima testarlo o potresti ricevere messaggi 'warning: undefined index ....'.

Per quanto riguarda il test se il valore dell'elemento è uguale a una stringa, puoi usare == o (di nuovo a volte meglio) l'operatore di identità === che non consente la giocoleria di tipo .

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

array_key_exists è sempre una soluzione migliore
AjayR

5

in_array () va bene se stai solo controllando, ma se hai bisogno di controllare che esista un valore e restituire la chiave associata, array_search è un'opzione migliore.

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

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

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

Verrà stampato "Key is 1"


3

Usa semplicemente la funzione 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";
}
?>

3
<?php
if (in_array('your_variable', $Your_array)) {
    $redImg = 'true code here';
} else {
    $redImg = 'false code here';
} 
?>

1
Una risposta migliore di solito contiene una spiegazione oltre al codice. Credo che così facendo migliorerai la tua risposta!
amit

1

Bene, prima di tutto un array associativo può avere una chiave definita una sola volta, quindi questo array non esisterebbe mai. Altrimenti, usa solo in_array()per determinare se quell'elemento specifico dell'array è in un array di possibili soluzioni.


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

Un altro uso di in_array in_array () con un array come ago

<?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";
}
?>

1

Supponendo che tu stia usando un semplice array

. vale a dire

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

Puoi usare questa funzione

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.