2012-01-24 71 views
1

數組索引我有大約360鍵的數組:獲得基於多個值

$threadColours['Apricot'] = array(250,180,160,3341,328,826,194,3332,0); 
$threadColours['Apricot, Light'] = array(255,230,225,3824,8,833,2605,-1,1); 
$threadColours['Apricot, Medium'] = array(255,135,105,3340,329,827,193,-1,2); 

我檢索,從這個陣列來了一個像素的RGB值。所以我需要獲得關鍵字,例如$ threadColours [???] [0] = 250,[1] = 180,[2] = 160。我知道你可以搜索一個單一的鍵,但我不知道如何匹配多個值。爲了清楚起見,我有rgb值,我只想知道如何獲得分別具有[0],[1],[2]中所有三個值的密鑰。

謝謝你了, 託德

回答

2
function getColourKey($colours, $r, $g, $b) { 
    foreach ($colours as $key => $value) 
     if ($value[0] == $r && $value[1] == $g && $value[2] == $b) 
      return $key; 
    return NULL; 
} 
0

您可以使用這樣的代碼:

$threadColours['Apricot'] = array(250,180,160,3341,328,826,194,3332,0); 
$threadColours['Apricot, Light'] = array(255,230,225,3824,8,833,2605,-1,1); 
$threadColours['Apricot, Medium'] = array(255,135,105,3340,329,827,193,-1,2); 
$needle=array(2605,-1,1); // this is your r,g,b 
$startIndex = -1; 
$rootElem = ""; 
foreach ($threadColours as $key => $arr) { 
    for ($i=0; $i < count($arr); $i+=3) { 
     if ($arr[$i] == $needle[0] && 
      $arr[$i+1] == $needle[1] && 
      $arr[$i+2] == $needle[2] 
     ) { 
     $rootElem = $key; 
     $startIndex = $i; 
     break; 
     } 
    } 
} 
printf("rootElem=[%s], startIndex=[%s]\n", $rootElem, $startIndex); 

OUTPUT:

rootElem=[Apricot, Light], startIndex=[6] 
0
$search = array(250, 180, 160); 
$color = null; 
foreach ($threadColours as $key => $val) { 
    if (array_slice($val, 0, 3) == $search) { 
     $color = $key; 
     break; 
    }; 
}