Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PHP RGB dynamische Hintergrundfarbe errechnen

Frage Entwicklung PHP

Mitglied: Midivirus

Midivirus (Level 2) - Jetzt verbinden

06.08.2014, aktualisiert 12:05 Uhr, 1165 Aufrufe, 5 Kommentare, 1 Danke

Guten Morgen Gemeinde,

ich gebe euch mal meinen bisherigen Code vorweg:

01.
function rgb($intPct, $intPctM){ 
02.
	// round(max(0,255-(($intPct-0)*16.1))) 
03.
	$array = array
04.
	0=>array(0,255,0), 		//grün 
05.
	1=>array(15,255,0), 
06.
	2=>array(30,255,0), 
07.
	3=>array(45,255,0), 
08.
// schnipp 
09.
	13=>array(195,255,0), 
10.
	14=>array(210,255,0), 
11.
	15=>array(225,255,0),	//gelb 
12.
	16=>array(240,255,0), 
13.
	17=>array(255,255,0), 
14.
	18=>array(255,240,0), 
15.
	19=>array(255,225,0), 
16.
	20=>array(255,210,0), 
17.
	21=>array(255,195,0), 
18.
// schnipp 
19.
	31=>array(255,45,0), 
20.
	32=>array(255,30,0), 
21.
	33=>array(255,15,0), 
22.
	34=>array(255,0,0),		// rot 
23.
	35=>array(255,0,25), 
24.
	36=>array(255,0,50), 
25.
	37=>array(255,0,75), 
26.
	38=>array(255,0,100), 
27.
	39=>array(255,0,125), 
28.
	40=>array(255,0,150), 
29.
	); 
30.
		 
31.
	return(' style="background-color:rgb('.$array[$intPct][0].','.$array[$intPct][1].','.$array[$intPct][2].')" '); 
32.
}
Nachdem ich auf einer anderen Webseite ein Codeschnipsel mit in dieser Art gefunden hatte round(max(0,255-(($intPct-0)*16.1))) ist das okay, aber die Abstände sind ja dynamisch.
Meine Tabelle oben ist nur für den Übergang ... !

Die obige Funktion erzeugt dann eine schöne Farbskala:
a7d44500cad50bbbc1def80ca317c34f - Klicke auf das Bild, um es zu vergrößern


Mein Ziel ist es aber, aus einer Reihe von 5 Werten, wird der höchste mit 40 belegt und entsprechend prozentual die anderen angefärbt:
bdd7ed115311b9523f9deaddd676dcce - Klicke auf das Bild, um es zu vergrößern
Die Funktion bekommt den aktuellen Wert für die Hintergrundfarbe und den Maximalwert als Orientierung.

Excel kann das wunderbar, bislang fehlte mir aber noch eine nachvollziehbare Funktion hierfür.


Tipps zur Lösungsfindung wäre verdammt cool.
Mitglied: SlainteMhath
LÖSUNG 06.08.2014, aktualisiert um 13:23 Uhr
Moin,

das sollte sich mit einem Dreisatz lösen lassen
Pseudo Code
01.
ArrayElement=(MaximalWert/100) * (länge(array)/100)
Ohne Gewähr - hatte erst einen Kaffee heute

lg,
Slainte
Bitte warten ..
Mitglied: colinardo
LÖSUNG 06.08.2014, aktualisiert um 15:28 Uhr
Moin,
wie @SlainteMhath schon schreibt ist das mit einer einfachen Prozentrechnung erledigt. Hier ein Beispiel:
01.
<?php 
02.
function getColor($current,$max){ 
03.
	$intPct = round(($current / $max) * 100); 
04.
	$r=($intPct<50) ? round(min(255,$intPct*5.1 ))          :255; 
05.
	$g=($intPct>50) ? round(max(0,255-(($intPct-50)*5.1)))  :255; 
06.
	return $r.','.$g.',0'; 
07.
08.
function printArray(){ 
09.
	$arr = array(5,65,44,33,20,50,80); 
10.
	$max = max($arr); 
11.
	for($i = 0; $i < count($arr); $i++){ 
12.
		$out .= '<td style="text-align:center;width:50px;background-color:rgb('.getColor($arr[$i],$max).')">'. $arr[$i].'</td>'; 
13.
14.
	return $out; 
15.
16.
?> 
17.
<!DOCTYPE HTML> 
18.
<html> 
19.
<head> 
20.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
21.
<title> Color</title> 
22.
</head> 
23.
<body> 
24.
<table> 
25.
<tr><?php echo printArray(); ?></tr> 
26.
</table> 
27.
</body> 
28.
</html>
Viel Erfolg
Grüße Uwe
Bitte warten ..
Mitglied: Midivirus
06.08.2014, aktualisiert um 12:06 Uhr
Ich hab es so gelöst:

01.
function rgb($intPct, $intPctM){ 
02.
	$array = array
03.
	0=>array(0,255,0), 		//grün 
04.
	1=>array(15,255,0), 
05.
	2=>array(30,255,0), 
06.
//schnipp 
07.
	13=>array(195,255,0), 
08.
	14=>array(210,255,0), 
09.
	15=>array(225,255,0),	//gelb 
10.
	16=>array(240,255,0), 
11.
	17=>array(255,255,0), 
12.
	18=>array(255,240,0), 
13.
//schnipp 
14.
	32=>array(255,30,0), 
15.
	33=>array(255,15,0), 
16.
	34=>array(255,0,0),		// rot 
17.
//schnipp 
18.
	); 
19.
 
20.
	$intPct = round((count($array)-1)*($intPct/($intPctM/100))/100); 
21.
 
22.
	return('background-color:rgb('.$array[$intPct][0].','.$array[$intPct][1].','.$array[$intPct][2].'); color:black;'); 
23.
}
Bitte warten ..
Mitglied: colinardo
06.08.2014 um 13:15 Uhr
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Bitte warten ..
Mitglied: Midivirus
06.08.2014, aktualisiert um 13:24 Uhr
... ich vergess das immer wieder
Bitte warten ..
Neuester Wissensbeitrag
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ähnliche Inhalte
PHP
PHP: URL kürzen (14)

Frage von michi-ffm zum Thema PHP ...

PHP
gelöst PHP 7 und LDAP mit Umlauten (3)

Frage von wiesi200 zum Thema PHP ...

Administrator.de Feedback
Entwicklertagebuch: PHP 7 (4)

Information von admtech zum Thema Administrator.de Feedback ...

Entwicklung
Was brauche ich um über PHP eine Oberfläche zu erstellen? (10)

Frage von SIMONJAKOB zum Thema Entwicklung ...

Heiß diskutierte Inhalte
CPU, RAM, Mainboards
Kaufberatung für mind. 8 verschiedene HighEnd-Mainboards (23)

Frage von yperiu zum Thema CPU, RAM, Mainboards ...

Mac OS X
Mac kann nicht im LAN pingen alle anderen schon (19)

Frage von smartino zum Thema Mac OS X ...

Hyper-V
Langsames Netzwerk i210 LAN Karte (10)

Frage von Akcent zum Thema Hyper-V ...

Windows Server
Server 2016 - Kuriositäten (8)

Frage von certifiedit.net zum Thema Windows Server ...