Problem mit "in_array"
Chris
- php
Hallo,
wie schon im Titel gesagt hab ich ein Problem mit der "in_array" Funktion. Und zwar möchte ich Folgendes realisieren. Ich möchte eine Liste von Servern ausgeben die in einer Datenbank stehen und bestimmten Verträgen zugeordnet werden sollen. Dazu habe ich eine Tabelle in der alle Server stehen, eine Tabelle in der alle Verträge stehen und eine Tabelle in der die Server den Verträgen zugeordnet werden. Hoffe ihr konntet soweit folgen. Nun sollen, wenn man sich einen Vertrag anzeigen lässt, alle Server mit einer Checkbox daneben aufgelistet werden. Die Server die dem Vertrag schon zugeordnet sind sollen dann schon ein Häkchen haben, alle anderen natürlich nicht. Klingt eigentlich ganz leicht, aber irgendwie macht mir die "in_array" Funktion gerade das Leben schwer.
Hier mal der Quelltext zu dem was ich mir da ausgedacht habe. Nicht wundern, die Checkboxen sind da noch nicht berücksichtigt, er soll mir einfach erstmal ausgeben das der Server schon bei den "zu überwachenden" vorhanden ist und nicht mehr ausgegebn werden muss.
#-----------alle überwachende Server ausgeben----------
$sql_monitoring_select = mysql_query("select * from monitoring_hosts where contracts_id = '".$contracts_id."'");
$i = 0;
while($monitoring_select = mysql_fetch_array($sql_monitoring_select, $connect)) {
$server[$i] = $monitoring_select[host_name];
$i = $i++;
echo $server[$i]."<br>";
}
#------------------------------------------------------
#-----------alle Server ausgeben----------
$sql_monitoring_all = mysql_query("select * from hoststatus");
while($monitoring_all = mysql_fetch_array($sql_monitoring_all, $connect)) {
if (in_array($monitoring_all[host_name], $server)) {
echo "vorhanden<br>";
}
else
{
echo $monitoring_all[host_name]."<br>";
}
}
#------------------------------------------
hi,
Kontrollausgabe von $server nach dem Befüllen?
if (in_array($monitoring_all[host_name], $server)) {
Du meinst $monitoring_all['host_name'].
Kontrollausgabe dieses Wertes?
gruß,
wahsaga
Hallo Chris.
$server[$i] = $monitoring_select[host_name];
$i = $i++;
echo $server[$i]."<br>";
Es gibt einen wichtigen Unterschied zwischen dem Postinkrement ($i++) und dem Präinkrement (++$i). Erstere liefert _nicht_ -- wie von dir anscheinend angenommen -- den Wert $i+1, welcher dann in $i zugewiesen werden soll. $i verändert sich also in deiner Schleife nicht! Alle Ergebnisse werden in $server[0] geschrieben, was dir in einer Kontrollausgabe dieser Variablen aufgefallen wäre.
Ahh, ja das war das Problem. Super, jetzt funktioniert es so wie gedacht. Der Unterschied war mir nicht bekannt. Vielen Dank für die schnelle Hilfe.