如何检查数组值是否存在?


109

如何检查是否$something['say']具有'bla'或的值'omg'

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

45
数组中的键必须唯一。
Gumbo 2010年

Answers:


113

使用if

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

顺便说一句,您将say两次用键分配一个值,因此您的数组将导致一个只有一个值的数组。



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


6

要检查索引是否已定义: isset($something['say'])


我不明白这个答案的意图。如何达到检查指数值的目的?
布拉德·科赫

好问题。正如所写,这根本无法回答问题。我不记得了,但是由于我是在最初提出问题后大约3分钟回答的,所以我猜想OP会在最初的注册截止日期之前编辑其原始问题以使其更加清晰,然后才注册为编辑。如果那有意义的话。
回声

5

您可以使用isset()或有时甚至更好的array_key_exists()来测试数组是否完全具有某个元素(文档解释了区别)。如果不确定数组是否具有索引为“ say”的元素,则应首先进行测试,否则可能会收到“警告:未定义的索引...”消息。

至于测试元素的值是否等于字符串,可以使用==,或者(有时更好)使用标识运算符===,它不允许类型变乱

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

array_key_exists始终是更好的解决方案
AjayR 2011年

5

如果仅检查in_array()很好,但是如果需要检查值是否存在并返回关联的键,则array_search是一个更好的选择。

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

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

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

这将打印“ Key is 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
更好的答案通常除代码外还包含解释。我相信这样做会改善您的答案!
amit 2012年

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.