in_array()在大海捞针中找不到针

时间:2015-02-22 23:14:21

标签: php arrays

我在PHP中有一个简单的in_array语句。它正在寻找这个针:

926296884640412424_1534875699

在这个大海捞针:

Array (
    [0] => Array
        (
            [id] => 926296884640412424_1534875699
        )

    [1] => Array
        (
            [id] => 926301883885225094_723729160
        )
)

我的代码是这样的:

if(!in_array($object->id, $Admin->hiddenItems, true)) {
   // Always fires
} else {
   // Never fires
}

它永远找不到它。我已尝试将strict设置为TRUE和FALSE,但都不起作用。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

您正在搜索多维数组。在使用in_array()之前将其展平:

if (!in_array($object->id, array_column($Admin->hiddenItems, 'id'), true)) {
    ...
}

答案 1 :(得分:1)

<?php
$arrays = array(
    array(
        'id' => '926296884640412424_1534875699'
    ),
    array(
        'id' => '926301883885225094_723729160'
    )
);

print exist('926296884640412424_1534875699', $arrays);

function exist($id, $arrays) {
    foreach ($arrays as $array) {
        if (in_array($id, $array)) {
            return "exist";
        }
    }
    return "no exist";
}

答案 2 :(得分:1)

您也可以使用此递归函数在多维数组中搜索某些值:

function multi_in_array_r($needle, $haystack) {
     if(in_array($needle, $haystack)) {
          return true;
     }
     foreach($haystack as $element) {
          if(is_array($element) && multi_in_array_r($needle, $element))
               return true;
     }
   return false;
}

由您来决定什么能带来最佳效果,因为您可以看到实现相同目标的方法很少。