2013-06-25 67 views
-1

我不知道應該是什麼這個問題的標題,如果你有更好的選擇,不要猶豫,立即修改。陣列搜索返回類似數組鍵

我需要在array與球隊的全名搜索和返回的簡稱。現在,我有以下creteria:

$teams = array('MMB' => 'Mumbai', 'MMB' => 'Mumbai Indians'); 

$Vteam = (array_search($vteam, $teams, true) !== false) ? array_search($vteam, $teams) : substr($vteam, 0, 3); 

當我搜索「孟買印度人」,它返回「MMB」,但是當我搜索「孟買」獨自返回「媽媽」

我在$team陣列周圍50球隊的名字。

我應該如何代碼,以便在「孟買」「孟買印度人」搜索返回我「MMB」始終?

任何幫助將非常感激。

+7

同名鍵將覆蓋數據值 – swapnesh

+0

其實我無法控制數據,它來自一些API。我應該如何執行此操作。 – Harpreet

+1

很難理解你想達到的目標。 –

回答

2

如果您正在創建的$teams陣列自己,然後用數組中的值形成正確的!

$teams = array('MMB' => array('Mumbai', 'Mumbai Indians')); 

但是,如果你想要的短名稱的查找,反轉這樣的設計:

$teams = array('Mumbai' => 'MMB', 'Mumbai Indians' => 'MMB'); 

現在,如果你想知道Mumbai的簡稱,只是指數在陣列上他們的名字:

echo $teams['Mumbai']; // Output: MMB 
echo $teams['Mumbai Indians']; // Output: MMB 
+0

+1好一個創造,雖然第一個看起來好多了:) – swapnesh

+0

這可能會有幫助,我想我可以搜索與'array_key_exists'或 'array_keys' – Harpreet

+2

@Harpreet - 你不」不需要這些(昂貴的)搜索操作。你有'$ vteam',這是你想找的團隊的名字。如果你構成第二個數組,那麼你可以直接在'O(1)'time:'echo $ teams [$ vteam];'中找到短名稱。不需要線性搜索。 – nickb

0

如果你正在做的部分比賽,你可能會需要使用foreach循環:

$search = 'Mumbai'; 
$team = ''; 
foreach($teams as $shortname => $longname) { 
    if(strpos($longname,$search) !== false) { 
     $team = $shortname; 
     break; 
    } 
}