2012-01-24 4 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); 

ВЫХОДНОЙ:

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; 
    }; 
} 
Смежные вопросы