¿Cómo comprobar si existe un valor de matriz?

109

¿Cómo puedo comprobar si $something['say']tiene el valor de 'bla'o 'omg'?

$something = array('say' => 'bla', 'say' => 'omg');
Uffo
fuente
45
Las claves de una matriz deben ser únicas.
Gumbo

Respuestas:

113

Usando if?

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

Por cierto, está asignando un valor con la clave saydos veces, por lo tanto, su matriz dará como resultado una matriz con solo un valor.

Tatu Ulmanen
fuente
289

Puede usar la función PHP in_array

if( in_array( "bla" ,$yourarray ) )
{
    echo "has bla";
}
Benjamín Ortuzar
fuente
7
¿Es posible tener una matriz con claves idénticas? ¿El segundo valor no sobrescribirá el original?
Citricguy
47

Utilizando: 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";
}

Aquí está la salida: The 'prize_id' element is in the array


Utilizando: 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";
}

Ninguna salida


En conclusión, array_key_exists()no funciona con una matriz simple. Es solo para averiguar si existe una clave de matriz o no. Úselo en su in_array()lugar.

Aquí hay más ejemplo:

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

Aquí está PHP DEMO

Neeraj Singh
fuente
array_key_exists()comprueba las claves de la matriz, mientras que la última $search_arraycontiene una matriz asociativa. Sin duda no funcionará. Deberías array_flip()hacerlo primero.
Chay22
6

Para comprobar si el índice está definido: isset($something['say'])

eco
fuente
No entiendo la intención de esta respuesta. ¿Cómo se logra el objetivo de verificar el valor de un índice?
Brad Koch
Buena pregunta. Esto no responde la pregunta en absoluto, como está escrito. No lo recuerdo, pero como respondí unos 3 minutos después de que se hizo la pregunta originalmente, supongo que el OP editó su pregunta original para dejarla más clara, dentro del límite de edición inicial antes de que se registre como una edición. Si eso tiene algún sentido.
echo el
5

Puede probar si una matriz tiene un determinado elemento o no con isset () o, a veces, incluso mejor array_key_exists () (la documentación explica las diferencias). Si no puede estar seguro de si la matriz tiene un elemento con el índice 'decir', debe probarlo primero o puede recibir mensajes de 'advertencia: índice indefinido ...'.

En cuanto a la prueba de si el valor del elemento es igual a una cadena, puede usar == o (de nuevo a veces mejor) el operador de identidad === que no permite el malabarismo de tipos .

if( isset($something['say']) && 'bla'===$something['say'] ) {
  // ...
}
VolkerK
fuente
array_key_exists es siempre una mejor solución
AjayR
5

in_array () está bien si solo está comprobando, pero si necesita comprobar que existe un valor y devolver la clave asociada, array_search es una mejor opción.

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

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

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

Esto imprimirá "La clave es 1"

Tom Jowitt
fuente
3

Solo usa la función 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 clásico
fuente
3
<?php
if (in_array('your_variable', $Your_array)) {
    $redImg = 'true code here';
} else {
    $redImg = 'false code here';
} 
?>
Vishnu Sharma
fuente
1
Una mejor respuesta suele contener una explicación además del código. ¡Creo que hacerlo mejorará tu respuesta!
amit
1

Bueno, en primer lugar, una matriz asociativa solo puede tener una clave definida una vez, por lo que esta matriz nunca existiría. De lo contrario, utilice in_array()para determinar si ese elemento de matriz específico está en una matriz de posibles soluciones.

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

Otro uso de in_array in_array () con una matriz como aguja

<?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
fuente
1

Suponiendo que está usando una matriz simple

. es decir

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

Puedes usar esta función

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
fuente