如何在关联数组中使用PHP in_array?

时间:2014-02-16 08:51:08

标签: php search associative-array

是否有任何php函数,例如in_array,你可以通过mysql函数“mysql_fetch assoc”获得关联数组?

例如,如果我有一个如下所示的$数组:

array(0=>(array(ID=>1, name=>"Smith"), 1=>(array(ID=>2, name=>"John"))

我可以执行in_array(key,value,array)?

之类的操作

或者就我而言,如果我正在寻找ID值“1”,in_array("ID",1,$array)

这是我的解决方案,如果您认为这是正确的方式,请对其进行评论:

function in_assoc_array($key,$value,$array)
{
    if (empty($array))
        return false;
    else
    {
        foreach($array as $a)
        {
            if ($a[$key] == $value)
                return true;
        }
        return false;
    }
}

7 个答案:

答案 0 :(得分:30)

在你的情况下,我想知道简单地使用isset()是否更有意义,即

isset($a[$key])

答案 1 :(得分:10)

您不能直接在嵌套数组上执行此操作。您需要将其嵌套一点然后再进行操作。

<?php
$arr=array(0=>array('ID'=>1, 'name'=>"Smith"), 1=>array('ID'=>2, 'name'=>"John"));

foreach($arr as $arr1)
{
    if(in_array(1,$arr1))
    {
       echo "Yes found.. and the correspoding key is ".key($arr1)." and the employee is ".$arr1['name'];
    }
}

<强> OUTPUT :

Yes found.. and the correspoding key is ID and the employee is Smith

答案 2 :(得分:9)

试试这个...... 您可以将此函数用于关联数组的任何深度。只是对这个函数的约束是键值不会重复在数组中的任何位置。

<?php 
function is_in_array($array, $key, $key_value){
      $within_array = 'no';
      foreach( $array as $k=>$v ){
        if( is_array($v) ){
            $within_array = is_in_array($v, $key, $key_value);
            if( $within_array == 'yes' ){
                break;
            }
        } else {
                if( $v == $key_value && $k == $key ){
                        $within_array = 'yes';
                        break;
                }
        }
      }
      return $within_array;
}
$test = array(
                0=> array('ID'=>1, 'name'=>"Smith"), 
                1=> array('ID'=>2, 'name'=>"John")
        );
print_r(is_in_array($test, 'name', 'Smith'));
?>

答案 3 :(得分:4)

首先,你必须知道你将在in_array函数中用作haystack的关联数组的哪一部分。然后,您可以使用in_array而无需其他代码。

值示例:

<?php
$assoc = array(1 => "apple", 2 => "banana", 3 => "lemon", 4 => "pear");
$haystack = array_values($assoc);
echo "<p>" . print_r($assoc, true) . "</p>";

$needle = 'banana';
$find = (in_array($needle, $haystack)) ? 'TRUE' : 'FALSE';
echo "<p>$needle : $find</p>";

$needle = 'cherry';
$find = (in_array($needle, $haystack)) ? 'TRUE' : 'FALSE';
echo "<p>$needle : $find</p>";
?>

结果:

Array ( [1] => apple [2] => banana [3] => lemon [4] => pear )

banana : TRUE

cherry : FALSE

答案 4 :(得分:3)

这是您可以使用的一种衬垫。

$isInArray = in_array(1, array_column($names, 'ID'));

答案 5 :(得分:0)

样本公式,使用类和方法:

class VerifyInArray
{
 public function getMyCollection($field, $collection)
 {
     $list = array();
     if (count($collection)) {
        foreach ($collection as $k => $val) {
            $list[] = $val[$field];
        }
     }
     return $list;
 }

public function inMyArray($collection, $field, $findValue)
{
    if (isset($collection[0])) {
        if (array_key_exists($field, $collection[0]) == false) {
           return 'no'; 
        }
    }

    if (in_array($findValue, $this->getMyCollection($field, $collection))) {
        return 'ok';
    }
    return 'no';
}

public function displayInArray($collection, $attr, $value)
{
   return 'search result: '. $this->inMyArray($collection, $attr, $value);
}

}
$src = new VerifyInArray();

 $collection = array(
         array(
               'ID' => 1, 
               'name' => 'Smith'
         ), 
         array(
               'ID' => 2, 
               'name' => 'John'
         )
    );
echo $src->displayInArray($collection, 'ID', 2). "\n<br>" .
     $src->displayInArray($collection, 'ID', 0);

Model in ideone

答案 6 :(得分:0)

语法

 in_array(mixed $needle, array $haystack, bool $strict = false): bool

Needle 可以是混合类型,所以它可以是任何类型,无论是数字数组还是关联数组都没有问题。

in_array('foo',array_unique(array_keys($array)));