2012-05-15 84 views
0

我有以下的數組($ arrayres)(例如數據)PHP的array_search()不返回鍵

Array 
(
[0] => Array 
     (
      [description] => somedata 
      [amount] => 52,6 
      [b_id] => Array 
       (
        [0] => 138950106 
        [1] => 138950106 
       ) 

     ) 

    [1] => Array 
     (
      [description] => somedata 
      [amount] => 4,9 
      [b_id] => Array 
       (
        [0] => 138911857 
        [1] => 138911857 
       ) 

     ) 
) 

然後,我有一個返回其結果B_ID以及查詢。我需要找到數組中包含哪些b_id以及它們在數組中的位置。所以我執行array_rearch

while ($dbres = $res->fetchRow(MDB2_FETCHMODE_ASSOC)) 
{ 

    $key = array_search($dbres['b_id'], $arrayres); 
    if ($key) 
    { 
     $keys[] = $key; 
    } 

} 

但似乎沒有匹配。 print_r($ keys)總是空的,雖然有結果包含有問題的b_id。

我在做什麼錯?

+0

好謝謝你們我知道了。我想(希望)它會給我一個關鍵的數組。爲了簡化這個過程,我創建了另一個數組$ bid [],它只包含b_id和(使用相同的鍵),並對此進行了一次array_search。 – mspir

回答

1

當你做array_search($dbres['b_id'], $arrayres);你鑰匙搜索到該嵌套數組的「第一層」,當然,的劇院只01作爲鍵

你可以做這樣的事情

for($i=0;$i<count($arrayres);$i++) { 
    array_search($dbres['b_id'], $arrayres[$i]['b_id']); 
    if ($key) 
    { 
    $keys[] = $key; /* just follow your logic */ 
    } 
} 

,並且必須被插入到while循環

-1

試試這個...

if($key !== false){ 
    $keys[] = $key; 
} 
+0

這個應該怎麼辦? – DonCallisto

+0

某些時候,當key = 0時,如果我們檢查($ key!= false),那麼它將不會考慮第0個索引值。 –

+0

但這不是他的問題 – DonCallisto

1

您正在搜索的數組不包含您正在搜索的b_id。它包含一個包含該出價的數組。所以你需要循環你自己的數據陣列,或者提供array_search整個數組,如果可以的話。一種方法是這樣的:

function has_bid($arrayres, $bid) { 
    foreach ($arrayres as $k => $v) { 
      // This is assuming $bid is an array with 2 integers. 
      if ($v['bid'] == $bid) { 
       return $k; 
      } 
      // And this is assuming $bid is one of the integers. 
      /* 
       Here, array_search will search for the integer in an array that contains 
       the values you are searching for in the first level, 
       not inside an array that is inside another one. 
       You can think of it as array_search searching the first level of it. 
      */ 
      if (array_search($bid, $v) !== false) { 
       return $k; 
      } 
    } 
    return false; 
} 

你就可以使用這個功能,像這樣:

$key = has_bid($arrayres, $dbres['bid']); 
if ($key !== false) { 
    // do something... 
}