Jak sprawdzić, czy istnieje wartość tablicy?

109

Jak mogę sprawdzić, czy $something['say']ma wartość'bla' lub 'omg'?

$something = array('say' => 'bla', 'say' => 'omg');
Uffo
źródło
45
Klucze w tablicy muszą być unikalne.
Gumbo

Odpowiedzi:

114

Używasz if?

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

Przy okazji, przypisujesz wartość kluczowi saydwukrotnie, stąd twoja tablica da w wyniku tablicę tylko z jedną wartością.

Tatu Ulmanen
źródło
289

Można użyć PHP in_array funkcji

if( in_array( "bla" ,$yourarray ) )
{
    echo "has bla";
}
Benjamin Ortuzar
źródło
7
Czy można mieć tablicę z identycznymi kluczami? Czy druga wartość nie nadpisałaby oryginału?
Citricguy
47

Za pomocą: 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";
}

Oto wynik: The 'prize_id' element is in the array


Za pomocą: 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";
}

Brak wyjścia


Podsumowując, array_key_exists()nie działa z prostą tablicą. Służy tylko do sprawdzenia, czy klucz tablicy istnieje, czy nie. Użyj in_array()zamiast tego.

Oto więcej przykładów:

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

Tutaj jest PHP DEMO

Neeraj Singh
źródło
array_key_exists()sprawdza klucze tablicy, podczas gdy ta ostatnia $search_arrayzawiera tablicę asocjacyjną. Bez wątpienia to nie zadziała. Powinieneś array_flip()to najpierw.
Chay22
6

Aby sprawdzić, czy indeks jest zdefiniowany: isset($something['say'])

Echo
źródło
Nie rozumiem intencji tej odpowiedzi. Jak osiąga się cel, jakim jest sprawdzenie wartości indeksu?
Brad Koch
Dobre pytanie. To w ogóle nie odpowiada na pytanie, tak jak jest napisane. Nie pamiętam, ale ponieważ odpowiedziałem około 3 minuty po pierwszym zadaniu pytania, domyślam się, że OP zredagował swoje oryginalne pytanie, aby było jaśniejsze, w ramach początkowego odcięcia edycji, zanim zostanie ono zarejestrowane jako zmiana. Jeśli to ma jakiś sens.
echo
5

Możesz sprawdzić, czy tablica ma w ogóle określony element, czy nie, za pomocą isset () lub czasami nawet lepiej array_key_exists () (dokumentacja wyjaśnia różnice). Jeśli nie możesz być pewien, czy tablica zawiera element z indeksem „powiedz”, powinieneś go najpierw przetestować lub możesz otrzymać komunikat „ostrzeżenie: niezdefiniowany indeks…”.

Jeśli chodzi o sprawdzenie, czy wartość elementu jest równa łańcuchowi, możesz użyć == lub (znowu czasami lepiej) operatora tożsamości ===, który nie pozwala na żonglowanie typami .

if( isset($something['say']) && 'bla'===$something['say'] ) {
  // ...
}
VolkerK
źródło
array_key_exists jest zawsze lepszym rozwiązaniem
AjayR
5

in_array () jest w porządku, jeśli tylko sprawdzasz, ale jeśli chcesz sprawdzić, czy wartość istnieje i zwrócić powiązany klucz, array_search jest lepszą opcją.

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

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

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

Spowoduje to wydrukowanie „Klucz to 1”

Tom Jowitt
źródło
3

Po prostu użyj funkcji 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
źródło
3
<?php
if (in_array('your_variable', $Your_array)) {
    $redImg = 'true code here';
} else {
    $redImg = 'false code here';
} 
?>
Vishnu Sharma
źródło
1
Lepsza odpowiedź zwykle zawiera wyjaśnienie oprócz kodu. Wierzę, że to poprawi Twoją odpowiedź!
popołudniu
1

Cóż, po pierwsze tablica asocjacyjna może mieć klucz zdefiniowany tylko raz, więc ta tablica nigdy by nie istniała. W przeciwnym razie użyj po prostu, in_array()aby określić, czy ten konkretny element tablicy znajduje się w tablicy możliwych rozwiązań.

animuson
źródło
1
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

Kolejne użycie in_array in_array () z tablicą jako igłą

<?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
źródło
1

Zakładając, że używasz prostej tablicy

. to znaczy

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

Możesz użyć tej funkcji

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

Stosowanie:

val_in_arr("red",$MyArray); //returns true
val_in_arr("brown",$MyArray); //returns false
Kareem
źródło