将in_array用于多维数组

时间:2014-11-04 19:43:47

标签: php arrays

好的,我有这个数组: -

0 => 
    array (size=2)
      'receiver_telmob' => string '0707105396' (length=10)
      0 => string '0707105396' (length=10)
  1 => 
    array (size=2)
      'receiver_telmob' => string '0704671668' (length=10)
      0 => string '0704671668' (length=10)
  2 => 
    array (size=2)
      'receiver_telmob' => string '0707333311' (length=10)
      0 => string '0707333311' (length=10)

我正在尝试使用in_array搜索此数组。但是,我从未获得任何真正的价值。 这就是我要做的事情: -

$searchnumber = '0707333311';
if(in_array($searchnumber,$arrayAbove))
{ 
//do something
}

但if总是导致错误的输出。我猜我在这里没有正确使用in_array。我应该纠正什么来使它工作? 感谢。

5 个答案:

答案 0 :(得分:0)

in_array()不适用于多维数组。你需要这样的东西 -

function in_multi_array($needle, $haystack, $strict = false) {
    foreach ($haystack as $item) {
        if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_multi_array($needle, $item, $strict))) {
            return true;
        }
    }
    return false; 
}

然后你可以这样做 -

$searchnumber = '0707333311';
if(in_multi_array($searchnumber,$arrayAbove))
{ 
//do something
}

答案 1 :(得分:0)

您无法将in_array用于多维数组!

但是这个功能对你有用:

<?php
    function in_array_r($needle, $haystack, $strict = false) {
        foreach ($haystack as $item) {
            if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
                return true;
            }
        }

        return false;
    }

?>

然后你可以像这样使用它:

echo in_array_r("0707333311", $arrayAbove) ? 'true(found)' : 'false(not found)';

答案 2 :(得分:0)

您必须使用in_array for each子数组。

所以如果你有一个像

这样的一维数组

[1,4,43,2,5,4]您可以致电in_array但是当您拥有多维时,您必须遍历顶层维并调用in_array

 for($i = 0;$i < arr.count(); $i++){
    if(in_array($searchnum, $arr[$i]){
     //do something
    }
 }

注意:上面的示例仅适用于2D阵列,只是为了演示我在说什么

答案 3 :(得分:0)

试试这个:

function in_array_recursive($needle, $haystack) {
    foreach($haystack as $item) {
        if ($needle = $item || is_array($item) && in_array_recursive($needle, $item)) 
            return true;
        }
    }
    return false;
}

$searchnumber = '0707333311';
if(in_array_recursive($searchnumber,$arrayAbove))
{ 
   //do something
}

答案 4 :(得分:0)

$array = array(
   "0" => array(
      "receiver_telmob" => "0707105396",
      "0"               => "0707105396"
   ),
   "1" => array(
      "receiver_telmob" => "0704671668",
      "0"               => "0704671668"
   ),
   "2" => array(
      "receiver_telmob" => "0707333311",
      "0"               => "0707333311"
   )
);

$searchnumber = "0707333311";

foreach($array as $v) {
   if ($v['receiver_telmob'] == $searchnumber) {
      $found = true;
   }
}

echo (isset($found) ? 'search success' : 'search failed');