获取基于多个值的数组索引

时间:2012-01-24 18:12:33

标签: php arrays

我有一个包含大约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]中具有所有三个值的键。

非常感谢, 托德

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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]

答案 2 :(得分:0)

$search = array(250, 180, 160);
$color  = null;
foreach ($threadColours as $key => $val) {
    if (array_slice($val, 0, 3) == $search) {
        $color = $key;
        break;
    };
}