2014-02-16 79 views
6

是否有任何PHP函數,例如in_array爲mysql函數「mysql_fetch assoc」獲取的關聯數組?如何在關聯數組中使用PHP in_array?

舉例來說,如果我有一個$陣列看起來像這樣:

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

我想你想的鍵/值對您的給定值進行比較。對? –

回答

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

這是令人失望的,這是公認的答案。 –

+0

我不udnerstand爲什麼你寫一個新的代碼,當存在對一個內置功能。你可以在下面看到它。另一方面,'$ k'變量會浪費內存空間,因爲它應該只檢查值。 – PumpkinSeed

+0

@AndrewJarvis雖然已經有一段時間了,你爲什麼這麼說呢?當我們知道密鑰和數組是以這種方式設計的時候,我們使用了 –

6

你不能直接做它在嵌套的數組。您需要嵌套下來了一點,然後做它。

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

猜猜我只需要爲它編寫自己的函數,那麼吧? –

+0

只是做一個'foreach',你可以在裏面做。 –

+0

我編輯了我的文章,查看代碼並告訴我您是否認爲它的正確性,或者是否有辦法讓它變得更好。 –

4

首先你要知道你要在in_array功能草垛要使用的關聯數組的一部分。然後,您可以使用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 
20

在你的情況,我不知道如果簡單地使用isset()函數更有意義,即

isset($a[$key]) 
+0

。有時我們不得不搜索 – rajangupta

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