[PHP] Farb-Array sortieren

martin

Well-Known Member
Moin

wie der Titel schon sagt, habe ich ein Array, das als Key Farbwerte in Hex hat und als value die entsprechende RAL Nummer. Diese sind bunt gemischt und ich möchte sie nach Helligkeit der Farbe sortieren. Hier mal mein Ansatz:

PHP:
$farben_ral = Array('C8B471' => 'RAL 1000', 'CAA66B' => 'RAL 1001', 'CCA056' => 'RAL 1002', 'F6AE24' => 'RAL 1003', 'DCA71F' => 'RAL 1004', 'C08E19' => 'RAL 1005', 'DC8B1B' => 'RAL 1006', 'E68018' => 'RAL 1007', '996338' => 'RAL 1011', 'D4AF32' => 'RAL 1012', 'F7F3D2' => 'RAL 1013', 'EAD590' => 'RAL 1014', 'FFF8C9' => 'RAL 1015', 'EBFF64' => 'RAL 1016', 'FFB645' => 'RAL 1017', 'FFFF4F' => 'RAL 1018', 'A2735F' => 'RAL 1019', '9C7B49' => 'RAL 1020', 'FFDC2D' => 'RAL 1021', 'FFE92A' => 'RAL 1023', 'B8873B' => 'RAL 1024', 'FFFF43' => 'RAL 1026', 'A68123' => 'RAL 1027', 'FFB521' => 'RAL 1028', 'FFC22E' => 'RAL 1032', 'FF9523' => 'RAL 1033', 'FA9542' => 'RAL 1034', 'DF4B11' => 'RAL 2000', 'BE1F10' => 'RAL 2001', 'D71910' => 'RAL 2002', 'FF5A22' => 'RAL 2003', 'FF3011' => 'RAL 2004', 'FF860F' => 'RAL 2005', 'FFC435' => 'RAL 2007', 'FF4718' => 'RAL 2008', 'EB2D12' => 'RAL 2009', 'D8381C' => 'RAL 2010', 'EB4E1D' => 'RAL 2011', 'E03B2D' => 'RAL 2012', 'B11512' => 'RAL 3000', 'AA1313' => 'RAL 3001', 'A8120F' => 'RAL 3002', '881010' => 'RAL 3003');

echo "Unsortiert:<br><div>";
foreach($farben_ral as $farbe => $bez){
    echo "<span style='border:1px solid black;font-size:13px;background-color:#".$farbe."'>";
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    echo "</span>&nbsp;";
}
echo "</div>";
foreach ($farben_ral as $key => $value){
    
    $r = hexdec($key[0].$key[1]);
    $g = hexdec($key[2].$key[3]);
    $b = hexdec($key[4].$key[5]);
    //echo $key."-->".$r."-".$g."-".$b."<br>";    
    $sort_ral[$key] = (0.2126 * $r) + (0.7152 * $g) + (0.0722 * $b);
    
}
array_multisort($sort_ral, SORT_DESC, $farben_ral);

echo "Sortiert:<br><div>";
foreach($farben_ral as $farbe => $bez){
    echo "<span style='border:1px solid black;font-size:13px;background-color:#".$farbe."'>";
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    echo "</span>&nbsp;";
}
echo "</div>";

Wie man sieht klappt das nicht so richtig. Zum einen werden die Farben zwar sortiert, aber bei einigen stimmt die neue Reihenfolge nicht mit der Helligkeit überein.
Zum anderen werden jene Farben, die rein aus Zahlen bestehen, immer als weiß dargestellt, obwohl ich sie ja mit ' ' eingegeben habe.
 
Also das zweite Problem kannst Du lösen, indem Du die Hex-Werte als String bearbeitest:
Code:
    $r = hexdec(substr($key,0,2));
    $g = hexdec(substr($key,2,2));
    $b = hexdec(substr($key,4,2));

Was die Sortierung betrifft, kann ich Dir nicht weiterhelfen, weil ich mich mit der Farblehre bzw. deren numerischer Darstellung nicht auskenne.
 
Zurück
Oben