Як перевірити, чи існує значення масиву?


109

Як я можу перевірити, чи $something['say']має значення 'bla'або 'omg'?

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

45
Ключі в масиві повинні бути унікальними.
Gumbo

Відповіді:


113

Використовуючи if?

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

Btw, ви присвоюєте значення ключу sayдвічі, отже, ваш масив призведе до масиву лише з одним значенням.


289

Ви можете використовувати PHP in_array функцію

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

7
Чи можливо мати масив з однаковими ключами? Чи не буде друге значення замінити оригінал?
Citricguy

47

Використання: 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";
}

Ось вихід: The 'prize_id' element is in the array


Використання: 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";
}

Виходу немає


На закінчення, array_key_exists()не працює з простим масивом. Це лише знайти, чи існує ключ масиву чи ні. Використовуйте in_array()замість цього.

Ось ще приклад:

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

Ось PHP DEMO


array_key_exists()перевіряє наявність ключів масиву, тоді як останній $search_arrayмістить асоціативний масив. Без сумніву, це не спрацює. Ви повинні array_flip()спочатку.
Чай22


6

Щоб перевірити, чи визначено індекс: isset($something['say'])


Я не розумію наміру цієї відповіді. Як досягти мети перевірки значення індексу?
Бред Кох

Гарне питання. Це зовсім не відповідає на запитання, як це написано. Я не пригадую, але оскільки я відповів приблизно через 3 хвилини після того, як запитання було спочатку задано, я б припустив, що ОП відредагував своє первісне питання, щоб зробити його більш зрозумілим, в межах початкового відключення редагування, перш ніж він зареєструвався як редагування. Якщо це має сенс.
відлуння

5

Ви можете перевірити, чи має масив взагалі певний елемент чи ні з isset () або іноді навіть краще array_key_exists () (документація пояснює відмінності). Якщо ви не можете бути впевнені, що в масиві є елемент з індексом "скажіть", ви повинні перевірити це спочатку, або ви можете отримати "попередження: невизначений індекс ....".

Що стосується тесту, наскільки значення елемента дорівнює рядку, ви можете використовувати == або (знову ж таки іноді краще) оператор ідентичності ===, що не дозволяє жонглювати типу .

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

array_key_exists - завжди краще рішення
AjayR

5

in_array () добре, якщо ви лише перевіряєте, але якщо вам потрібно перевірити, чи існує значення, і повернути пов'язаний ключ, array_search - кращий варіант.

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

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

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

Це надрукує "Ключ 1"


3

Просто використовуйте функцію 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
Краща відповідь зазвичай містить пояснення на додаток до коду. Я вірю, що це покращить вашу відповідь!
Аміт

1

Ну, спочатку асоціативний масив може мати ключ, визначений лише один раз, тому цей масив ніколи не існував би. В іншому випадку просто використовуйте, in_array()щоб визначити, чи є конкретний елемент масиву в масиві можливих рішень.


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

Інше використання in_array in_array () з масивом як голка

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

Припустимо, що ви використовуєте простий масив

. тобто

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

Ви можете використовувати цю функцію

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

Використання:

val_in_arr("red",$MyArray); //returns true
val_in_arr("brown",$MyArray); //returns false
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.