Làm thế nào để kiểm tra xem một giá trị mảng có tồn tại hay không?


109

Làm cách nào để kiểm tra xem $something['say']có giá trị của 'bla'hoặc 'omg'không?

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

45
Các khóa trong một mảng phải là duy nhất.
Gumbo

Câu trả lời:


113

Sử dụng if?

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

Btw, bạn đang gán một giá trị với khóa sayhai lần, do đó mảng của bạn sẽ dẫn đến một mảng chỉ có một giá trị.


289

Bạn có thể sử dụng hàm in_array PHP

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

7
Có thể có một mảng với các khóa giống hệt nhau không? Giá trị thứ hai sẽ không ghi đè lên giá trị ban đầu?
Citricguy

47

Sử dụng: 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";
}

Đây là đầu ra: The 'prize_id' element is in the array


Sử dụng: 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";
}

Không có đầu ra


Kết luận, array_key_exists()không hoạt động với một mảng đơn giản. Nó chỉ để tìm xem một khóa mảng có tồn tại hay không. Sử dụng in_array()thay thế.

Đây là ví dụ khác:

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

Đây là PHP DEMO


array_key_exists()kiểm tra các khóa mảng trong khi khóa sau $search_arraychứa mảng kết hợp. Không nghi ngờ gì nữa, nó sẽ không hoạt động. Bạn nên array_flip()nó đầu tiên.
Chay22


6

Để kiểm tra xem chỉ mục có được xác định hay không: isset($something['say'])


Tôi không hiểu ý định của câu trả lời này. Làm thế nào để đạt được mục tiêu kiểm tra giá trị của chỉ mục?
Brad Koch,

Câu hỏi hay. Điều này hoàn toàn không trả lời câu hỏi, như nó đã được viết. Tôi không nhớ, nhưng vì tôi đã trả lời khoảng 3 phút sau khi câu hỏi được hỏi ban đầu, tôi đoán rằng OP đã chỉnh sửa câu hỏi ban đầu của họ để làm cho nó rõ ràng hơn, trong khoảng thời gian chỉnh sửa ban đầu trước khi nó được đăng ký là một chỉnh sửa. Nếu mà làm cho bất kỳ ý nghĩa.
echo

5

Bạn có thể kiểm tra xem một mảng có một phần tử nhất định hay không bằng Isset () hoặc đôi khi tốt hơn là array_key_exists () (tài liệu giải thích sự khác biệt). Nếu bạn không thể chắc chắn liệu mảng có một phần tử có chỉ mục 'nói rằng', bạn nên kiểm tra phần tử đó trước hoặc bạn có thể nhận được thông báo 'warning: undefined index ....'.

Đối với việc kiểm tra xem giá trị của phần tử có bằng một chuỗi hay không, bạn có thể sử dụng == hoặc (một lần nữa đôi khi tốt hơn) toán tử nhận dạng === không cho phép loại tung hứng .

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

array_key_exists luôn là giải pháp tốt hơn
AjayR

5

in_array () tốt nếu bạn chỉ đang kiểm tra nhưng nếu bạn cần kiểm tra xem một giá trị có tồn tại hay không và trả về khóa được liên kết, thì array_search là một lựa chọn tốt hơn.

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

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

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

Điều này sẽ in "Khóa là 1"


3

Chỉ cần sử dụng hàm 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
Một câu trả lời tốt hơn thường chứa một lời giải thích ngoài mã. Tôi tin rằng làm như vậy sẽ cải thiện câu trả lời của bạn!
amit

1

Trước hết, một mảng kết hợp chỉ có thể có một khóa được xác định một lần, vì vậy mảng này sẽ không bao giờ tồn tại. Nếu không, chỉ cần sử dụng in_array()để xác định xem phần tử mảng cụ thể đó có nằm trong một mảng các giải pháp khả thi hay không.


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

Một cách sử dụng khác của in_array in_array () với một mảng là kim

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

Giả sử bạn đang sử dụng một mảng đơn giản

. I E

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

Bạn có thể sử dụng chức năng này

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

Sử dụng:

val_in_arr("red",$MyArray); //returns true
val_in_arr("brown",$MyArray); //returns false
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.