title: RGB to closest predefined color
body: <p><strong>Edit:</strong></p>
  
  <p>With the answer given I made this function</p>
  
  <pre><code>function grabclosestcolor($r, $g, $b){
      $colors = array(array(124,12,12),array(7,7,11),array(110,224,219),array(123,123,123),array(124,177,74),array(130,86,53),array(77,77,77),array(164,124,68),array(204,196,132),array(164,148,147),array(163,123,67),array(26,122,26), array(195,195,50),array(193,193,193),array(255,248,73),array(243,243,243));
      $differencearray = array();
      foreach ($colors as $value) {
          $difference = sqrt(pow($r-$value[0],2)+pow($g-$value[1],2)+pow($b-$value[2],2));
          array_push($differencearray, $difference);
          $smallest = min($differencearray);
          $key = array_search($smallest, $differencearray);
          return $colors[$key];
          }
      }
  </code></pre>
  
  <p><hr>
  My goal is this. I grab a picture and loop through each pixel and grab its x,y, and rgb.</p>
  
  <p>Instead of just grabbing the rgb, I have a predefined array and I'm looking for the closest match from the color I grabbed to the predefined array.
  The goal here is to only use colors from the predefined array.
  Here is my array of colors.</p>
  
  <pre><code>$colors = array(array(124,12,12),array(7,7,11),array(110,224,219),array(123,123,123),array(124,177,74),array(130,86,53),array(77,77,77),array(164,124,68),array(204,196,132),array(164,148,147),array(163,123,67),array(26,122,26), array(195,195,50),array(193,193,193),array(255,248,73),array(243,243,243));
  </code></pre>
  
  <p>and here is my existing code that loops through it all.</p>
  
  <pre><code>$int = imagesx($im) - 1;
  $int2 = imagesy($im) - 1;
  $start2 = 0;
  do{
      $start = 0;
      do{
          $rgb = imagecolorat($im, $start, $start2);
          $r = ($rgb &gt;&gt; 16) &amp; 0xFF;
          $g = ($rgb &gt;&gt; 8) &amp; 0xFF;
          $b = $rgb &amp; 0xFF;
          $value = rgb2hex($r,$g,$b).":$start:$start2";
          array_push($colorsofimage, $value);
      } while($int &gt; $start++);
  } while($int2 &gt; $start2++);
  </code></pre>
  
  <p>rgb2hex is a User Defined Function, but what I want to accomplish is to change that function with the function to grab the closest color.</p>
  
  <p>$colorsofimage contains an array of each pixels info with hex:x:y
  what i want it to be is rgb2hex(NEWFUNCTION($r,$g,$b));
  So that the new hex is the 1 out of the predefined array.</p>
  
  <p>I hope you understood, because I have no clue how to do it because I don't know the algorithm of a color.</p>