2014-02-16 7 views
6

Gibt es irgendeine PHP-Funktion wie in_array für assoziative Arrays, die Sie mit der mysql-Funktion "mysql_fetch assoc" erhalten?Wie benutzt man PHP in_array mit assoziativem Array?

Zum Beispiel, wenn ich eine $ Array, das wie folgt aussieht:

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

Kann ich etwas tun, wie in_array(key,value,array)?

Oder in meinem Fall, wenn ich für den ID-Wert Suche von " 1 ", in_array("ID",1,$array).

Diese meine Lösung ist, Stellung zu nehmen, wenn Sie denken, es ist der richtige Weg:

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; 
    } 
} 
+0

Ich glaube, Sie den Schlüssel/Wert-Paar mit dem angegebenen Wert vergleichen möchten. Recht? –

Antwort

9

Try this ..... Diese Funktion können Sie für jede Tiefe des zugehörigen Array. Ein Nachteil dieser Funktion ist, dass der Schlüsselwert nicht irgendwo in Array wiederholt wird.

<?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')); 
?> 
+2

Es ist enttäuschend, dass dies die akzeptierte Antwort ist. –

+0

Ich weiß nicht warum du einen neuen Code geschrieben hast, wenn es dafür eine eingebaute Funktion gibt. Sie können es unten sehen. An einem anderen Punkt ist die Variable $ k eine Verschwendung von Speicherplatz, da sie nur den Wert überprüfen sollte. – PumpkinSeed

+0

@AndrewJarvis obwohl es schon eine Weile her ist, warum sagst du das? –

6

Sie nicht direkt auf verschachtelte Arrays tun können .. Sie müssen es Nest ein wenig nach unten und dann tun es.

<?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 
+0

Ich denke, ich muss nur meine eigene Funktion dafür schreiben, oder? –

+0

Nein, mach einfach eine 'foreach' und du kannst es innerhalb dessen machen. –

+0

Ich habe meinen Beitrag bearbeitet, den Code angeschaut und mir gesagt, ob du es für richtig hältst oder ob es einen Weg gibt, es besser zu machen. –

4

Zuerst müssen Sie wissen, welcher Teil des assoziativen Arrays Sie in in_array Funktion als Heuhaufen verwenden werden. Dann können Sie in_array ohne zusätzlichen Code verwenden.

Beispiel mit Werten:

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

Ergebnisse in:

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

banana : TRUE 

cherry : FALSE 
20

In Ihrem Fall, ich frage mich einfach, wenn mit isset() mehr Sinn macht, das heißt

isset($a[$key]) 
+0

isset verwenden wir, wenn wir wissen, dass der Schlüssel und das Array auf diese Weise entworfen sind. manchmal müssen wir in_array suchen – rajangupta

0

Die Beispielformular, mit Klasse und Methoden:

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