Как проверить, существует ли значение массива?

109

Как я могу проверить, $something['say']имеет ли значение 'bla'или 'omg'?

$something = array('say' => 'bla', 'say' => 'omg');
Uffo
источник
45
Ключи в массиве должны быть уникальными.
Gumbo

Ответы:

114

Используя if?

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

Кстати, вы sayдважды назначаете значение с помощью ключа , поэтому ваш массив приведет к массиву только с одним значением.

Тату Улманен
источник
289

Вы можете использовать функцию PHP in_array

if( in_array( "bla" ,$yourarray ) )
{
    echo "has bla";
}
Бенджамин Ортузар
источник
7
Возможно ли иметь массив с одинаковыми ключами? Не будет ли второе значение перезаписать оригинал?
Citricguy 09
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()это сделать в первую очередь.
Chay22 01
6

Чтобы проверить, определен ли индекс: isset($something['say'])

эхо
источник
Я не понимаю смысла этого ответа. Как достичь цели проверки значения индекса?
Брэд Кох
Хороший вопрос. Это вообще не отвечает на вопрос, как написано. Я не помню, но поскольку я ответил примерно через 3 минуты после того, как вопрос был первоначально задан, я предполагаю, что OP отредактировал свой исходный вопрос, чтобы сделать его более ясным, в пределах первоначального отсечения редактирования, прежде чем он будет зарегистрирован как редактирование. Если в этом есть смысл.
echo
5

Вы можете проверить, есть ли в массиве определенный элемент вообще или нет, с помощью isset () или даже лучше array_key_exists () (различия объясняются в документации). Если вы не можете быть уверены, есть ли в массиве элемент с индексом say, сначала проверьте это, иначе вы можете получить сообщение «warning: undefined index ....».

Что касается проверки, равно ли значение элемента строке, вы можете использовать == или (опять же, иногда лучше) оператор идентификации ===, который не позволяет манипулировать типами .

if( isset($something['say']) && 'bla'===$something['say'] ) {
  // ...
}
VolkerK
источник
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";
}
?>
Xman Классический
источник
3
<?php
if (in_array('your_variable', $Your_array)) {
    $redImg = 'true code here';
} else {
    $redImg = 'false code here';
} 
?>
Вишну Шарма
источник
1
Лучший ответ обычно содержит пояснение в дополнение к коду. Я считаю, что это улучшит ваш ответ!
amit
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
Карим
источник