2010-07-05 62 views
1

如何檢查特定數組鍵是否存在以及如何比較它們?用不同的鍵檢查數組?

1.數組看起來像這樣。

[33] => Array 
       (
        [211] =>objectr 
         (
          [name] => Test 
          [id]=> 211 
        ) 
       ) 

[23] => Array 
       (
        [311] =>objectr 
         (
          [name] => Tester 
          [id]=> 311 
        ) 
       ) 

2.陣列看起來像這樣

[0] => 311 
    [1] => 211 
    [2] => 99 

現在我需要對它們進行比較,並讓他們的ID。

什麼即時尋找的是類似的東西

[0] => Tester 
    [1] => Test 

我該怎麼做呢?

+0

它只是一個普通的數組,或者你也試圖在數組中的對象中搜索? – xil3 2010-07-05 08:58:08

回答

2

array_key_exists - http://php.net/manual/en/function.array-key-exists.php

foreach($first_array as $arr) { 
    foreach($second_array as $key=>$val) 
    { 
     if (array_key_exists($val, $first_array)) { 
      $final_array[$key] = $arr['name']; 
     } 
    } 
} 

array_search - http://uk.php.net/array_search

foreach($first_array as $arr) { 
    foreach($second_array as $val) 
    { 
     $key = array_search($val, $arr); 
     if($key !== false) $final_array[$key] = $arr['name']; 
    } 
} 

在這兩種情況下,你應該結束了:

[0] => Tester 
    [1] => Test 
2

我會轉換數組1像刪除外鍵(至少暫時),然後在迭代通過數組2時,我會比較陣列1與array_key_exists轉換數組1。

1

我希望我理解你的問題,有可能成爲語言障礙,但是這裏我們去:

所以基本上你有3個數組,你想用最後一個來檢查第一個,看看這些值/鍵是否存在於第一個?那麼你想要做的第一件事就是將你的第一個數組重構成一些可以很容易地翻譯的東西,以便檢查下兩個數組的值和鍵。所以讓我們稱之爲第一陣列$ mapArray:

foreach($mapArray as $mapObject){ 
    foreach($mapObject as $object){ 
     $mapList[$object->id] = $object->name; 
    } 
} 

現在,這應該給我們這樣的:

[211] => 'test' 
[311] => 'tester' 

所以,現在讓我們稱之爲第2個數組$ arrayIds和第三個$ arrayNames。要查看是否時許ID存在,並給出了數組$ arrayIds時,得到它的名字,所有你需要做的是:

//given [0] => 311 
$keyExists = array_key_exists(311, $mapList); //returns true is the key exists 
echo $mapList[311]; //returns tester, the name for the id given 

和周圍的其他方式:

//given [0] => 'test' 
$nameExists = in_array('test', $mapList); 
if($nameExists) echo array_search('test', $mapList); // returns 211 

希望這是什麼你正在尋找或至少幫助你找到你正在尋找的東西。

1

另一種方法:我們第一陣列減少到一個維度:

$first = array(); 

foreach($first_array as $val) { 
    $first[key($val)] = current($val); 
} 

給出:

Array 
(
    [211] => Array 
     (
      [name] => Test 
      [id] => 211 
     ) 

    [311] => Array 
     (
      [name] => Tester 
      [id] => 311 
     ) 

) 

(我用了一個數組,而不是一個對象,但它的工作原理是相同的)。

,然後我們計算的關鍵交集:

//assume 
$second_array = array(311, 99); 

$result = array_intersect_key($first, array_flip($second_array)); 

這給:

Array 
(
    [311] => Array 
     (
      [name] => Tester 
      [id] => 311 
     ) 

) 

所以這是不太你想要什麼,但你可以很容易地通過$element->name訪問name屬性。