2012-05-30 84 views
0

我使用這個功能進行搜索(最高)陣列鍵時,用戶ID的價值發現:在陣列針搜索返回0,如果沒有找到

function array_search_value($needle,$haystack) { 
foreach($haystack as $key => $value) { 
    if(in_array($needle, $value)) return $key; 
} 
    } 

我的陣列看起來像這樣(它是由產生一個簡單的查詢):

Array 
(
[0] => Array 
    (
     [0] => 1 
     [userid] => 1 
     [1] => 2 
     [score1] => 2 
     [2] => 0 
     [score2] => 0 
    ) 

[1] => Array 
    (
     [0] => 3 
     [userid] => 3 
     [1] => 2 
     [score1] => 2 
     [2] => 2 
     [score2] => 2 
    ) 

[2] => Array 
    (
     [0] => 4 
     [userid] => 4 
     [1] => 1 
     [score1] => 1 
     [2] => 1 
     [score2] => 1 
    ) 

[3] => 
) 

此代碼:

echo array_search_value(4, $r) 

返回圖2,這是正確的。

尋找1給出0,這是正確的。

但是,當我搜索2(無法找到)時,它返回0. 這當然是不正確的......我希望它做的是什麼都不返回,而不是0 我試過通過添加「== true」來調試函數,但那也行不通。

任何人都知道如何解決這個問題?

非常感謝!

+0

它返回0 ,不是假的。 – binoculars

回答

1

當我搜索了2(不能找到),則返回0。這樣,脫軌,是不正確的......

在你提供的數組來看,它正確。該值2出現在關鍵0

[0] => Array 
    (
     [0] => 1 
     [userid] => 1 
     [1] => 2 // here 
     [score1] => 2 // and here 
     [2] => 0 
     [score2] => 0 
    ) 

如果你只是想看看userid鍵,那麼你就不能只用in_array(),但必須做這樣的:

<?php 
function array_search_value($needle,$haystack) { 
foreach($haystack as $key => $value) { 
    if($value['userid'] === $needle) return $key; 
} 
return null; // not found 
    } 

if (array_search_value(2, $r) === null) { /* doesn't happen */ } 
+0

這正是我想要做的!非常感謝! (info:必須將「===」更改爲「==」才能使其工作) – binoculars

1

當您搜索2時,您將獲得0,因爲您有$haystack[0][score1] = 2。你需要指定你正在尋找userid而不是其他任何東西。

foreach($haystack as $key => $value) { 
    if ($value['userid'] == $needle) { 
    return $key; 
    } 
} 
+0

這個工程!非常感謝! – binoculars

相關問題