Bir dizi değerinin olup olmadığı nasıl kontrol edilir?


109

Veya $something['say']değerinin olup olmadığını nasıl kontrol edebilirim ?'bla''omg'

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

45
Bir dizideki anahtarlar benzersiz olmalıdır.
Gumbo

Yanıtlar:


114

Kullanıyor ifmusunuz?

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

Btw, anahtarla sayiki kez bir değer atıyorsunuz, dolayısıyla diziniz yalnızca bir değeri olan bir dizi ile sonuçlanacaktır.


289

PHP in_array işlevini kullanabilirsiniz

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

7
Aynı anahtarlara sahip bir diziye sahip olmak mümkün mü? İkinci değer orijinalin üzerine yazılmaz mı?
Citricguy

47

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

İşte çıktı: The 'prize_id' element is in the array


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

Çıktı yok


Sonuç olarak, array_key_exists()basit bir dizi ile çalışmaz. Sadece bir dizi anahtarının var olup olmadığını bulmak içindir. in_array()Bunun yerine kullanın .

İşte daha fazla örnek:

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

Burada PHP DEMO


array_key_exists()ikincisi $search_arrayilişkilendirilebilir dizi içerirken dizi anahtarlarını denetler . Hiç şüphe yok ki işe yaramayacak. Önce sen yapmalısın array_flip().
Chay22


6

Dizinin tanımlı olup olmadığını kontrol etmek için: isset($something['say'])


Bu cevabın amacını anlamıyorum. Bir endeksin değerini kontrol etme hedefine nasıl ulaşılır?
Brad Koch

İyi soru. Yazıldığı gibi bu soruya hiç cevap vermiyor. Hatırlamıyorum, ancak soru ilk sorulduktan yaklaşık 3 dakika sonra cevapladığım için, OP'nin, bir düzenleme olarak kaydedilmeden önce ilk düzenleme kesintisi içinde daha net hale getirmek için orijinal sorusunu düzenlediğini tahmin ediyorum. Bu mantıklıysa.
echo

5

İsset () veya bazen daha iyi array_key_exists () ile bir dizinin belirli bir elemanı olup olmadığını test edebilirsiniz. (dokümantasyon farklılıkları açıklar). Dizinin 'say' indeksli bir elemanı olup olmadığından emin olamıyorsanız, önce bunu test etmelisiniz, yoksa 'uyarı: tanımsız dizin ....' mesajları alabilirsiniz.

Öğenin değerinin bir dizeye eşit olup olmadığını test etmek için == veya (yine bazen daha iyi) kimlik işleci === , tür hokkabazlığına izin vermez .

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

array_key_exists her zaman daha iyi bir çözümdür
AjayR

5

in_array () yalnızca kontrol ediyorsanız iyidir, ancak bir değerin var olup olmadığını kontrol etmeniz ve ilişkili anahtarı döndürmeniz gerekiyorsa, array_search daha iyi bir seçenektir.

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

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

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

Bu, "Anahtar 1'dir" yazacaktır


3

Sadece PHP işlevini kullanın 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
Daha iyi bir cevap genellikle koda ek olarak bir açıklama içerir. Bunu yapmanın cevabınızı iyileştireceğine inanıyorum!
amit

1

Öncelikle, ilişkilendirilebilir bir dizi yalnızca bir kez tanımlanmış bir anahtara sahip olabilir, bu nedenle bu dizi asla var olmaz. Aksi takdirde, in_array()belirli dizi öğesinin olası çözümler dizisinde olup olmadığını belirlemek için kullanın .


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

İn_array in_array () işlevinin iğne olarak bir dizi ile başka bir kullanımı

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

Basit bir dizi kullandığınızı varsayarsak

. yani

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

Bu işlevi kullanabilirsiniz

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

Kullanım:

val_in_arr("red",$MyArray); //returns true
val_in_arr("brown",$MyArray); //returns false
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.