web-dev-qa-db-fra.com

Comment utiliser PHP in_array avec tableau associatif?

Existe-t-il une fonction php telle que in_array pour les tableaux associatifs que vous obtenez avec la fonction mysql "mysql_fetch assoc"?

Par exemple, si j'ai un tableau $ qui ressemble à ceci:

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

Puis-je faire quelque chose comme in_array(key,value,array)?

Ou dans mon cas, si je recherche la valeur d'identification de "1", in_array("ID",1,$array).

Voici ma solution, commentez si vous pensez que c'est la bonne façon:

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;
    }
}
6
Jacob Cohen

Essayez ceci ..... Vous pouvez utiliser cette fonction pour n’importe quelle profondeur du tableau associé. Le seul inconvénient de cette fonction est que la valeur de la clé ne sera pas répétée où dans le tableau.

<?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'));
?>
9
user3270303

Dans votre cas, je me demande si le simple fait d’utiliser isset () a plus de sens, c’est-à-dire.

isset($a[$key])
25
Phil LaNasa

Vous ne pouvez pas le faire directement sur des tableaux imbriqués. Vous devez l'imbriquer un peu, puis le faire.

<?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
9
Shankar Damodaran

Vous devez d’abord savoir quelle partie du tableau associatif vous allez utiliser comme botte de foin dans la fonction in_array. Ensuite, vous pouvez utiliser in_array sans code supplémentaire.

Exemple avec des valeurs:

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

Résulte en :

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

banana : TRUE

cherry : FALSE
4
David Blanchard

La formule simple, en utilisant la classe et les méthodes:

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

0
Ivan Ferrer