วิธีตรวจสอบว่ามีค่าอาร์เรย์อยู่หรือไม่?


109

ฉันจะตรวจสอบ$something['say']ได้อย่างไรว่ามีค่า'bla'หรือ'omg'?

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

45
คีย์ในอาร์เรย์ต้องไม่ซ้ำกัน
Gumbo

คำตอบ:


114

ใช้if?

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

Btw คุณกำลังกำหนดค่าด้วยคีย์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()ทำก่อน
ชย 22


6

เพื่อตรวจสอบว่ามีการกำหนดดัชนีหรือไม่: isset($something['say'])


ฉันไม่เข้าใจเจตนาของคำตอบนี้ บรรลุวัตถุประสงค์ในการตรวจสอบค่าดัชนีอย่างไร
Brad Koch

คำถามที่ดี. นี่ไม่ได้ตอบคำถามเลยอย่างที่เขียนไว้ ฉันจำไม่ได้ แต่เนื่องจากฉันตอบคำถามประมาณ 3 นาทีหลังจากที่ถามครั้งแรกฉันเดาว่า OP แก้ไขคำถามเดิมของพวกเขาเพื่อให้ชัดเจนยิ่งขึ้นภายในการตัดการแก้ไขครั้งแรกก่อนที่จะได้รับการลงทะเบียนเป็นการแก้ไข ถ้ามันสมเหตุสมผล
ก้อง

5

คุณสามารถทดสอบว่าอาร์เรย์มีองค์ประกอบที่แน่นอนหรือไม่ด้วยisset ()หรือบางครั้งก็ดีกว่าarray_key_exists () (เอกสารประกอบอธิบายความแตกต่าง) หากคุณไม่แน่ใจว่าอาร์เรย์มีองค์ประกอบที่มีดัชนี 'say' หรือไม่คุณควรทดสอบสิ่งนั้นก่อนหรือคุณอาจได้รับข้อความ "คำเตือน: ดัชนีที่ไม่ได้กำหนด .... "

ในฐานะที่เป็นสำหรับการทดสอบว่าค่าองค์ประกอบของมีค่าเท่ากับสตริงคุณสามารถใช้ == หรือ (อีกครั้งบางครั้งดีกว่า) ผู้ประกอบการตัวตน===ซึ่งไม่อนุญาตประเภทการเล่นกล

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

สิ่งนี้จะพิมพ์คำว่า "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

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.