werte aus 2 arrays vergleichen und neu erstellen

mrbelvedere58

Grünschnabel
Hallo an alle

ich sitze schon seit einiger zeit an einem Problem und bekomme es nicht hin vieleicht kann mir jemand helfen?

ich Hole aus der db werte der 31 kalenderwoche die aber nicht alle tage einen wert enthät zb:
[0] ist der Wert und in [1] steht der tag vom monat 08

db Array
[0] => Array
[0] => 21.3
[1] => 1
[1] => Array
[0] => 19.7
[1] => 2

und ich erstelle mir ein array mit den Tagen der 31 Kl.

tage Array
[0] => 28
[1] => 29
[2] => 30
[3] => 31
[4] => 1
[5] => 2
[6] => 3

jetzt möchte ich ein new array erstellen was so aus sieht:
wenn der tag von (db array) = (tage array) dann trage die werte so ein: wenn nicht dann trage "" ein
herrauskommen sollte das:

new Array("", "", "", "", 21.3, 19.7, "")

ich benötige die "" unbedingt für eine auswertung in einem Diagramm

Vielen Dank im voraus,
Manfred
 
Hi,

den Aufbau Deines DB-Arrays verstehe ich nicht. Mach mal ein print_r($db_array), lass Dir den Quelltext im Browser anzeigen und poste die Ausgabe hier rein.

LG
 
Hallo und willkommen,

also ich würde das Array für die Zieltage direkt anders aufbauen. Du kannst z.B. direkt den Monatstag als entsprechenden Key für das Array nehmen und dann später nur die leeren Werte auffüllen wenn es unbedingt sein muss.

Also:
$array[$wochentag] = $wert;

lg
 
Auch wenn die beiden mit mir meckern warum ich sofort eine Komplettlösung anbiete, hier der passende Code:

PHP:
$a = array_fill_keys($tage, "");
if (count($db)) {
  do {
    $a[$db[current($db)][1]] = $db[current($db)][0];
  } while (next($db));
}

Bitte mal testen ob $a nun dein gewünschtes array ist.

Trotzdem bitte ich dich mal zu erläutern wie die Arrays $tage und $db zustande kommen, da man die Lösung schon da finden könnte, was dein Script erheblich beschleunigt.
 
Zuletzt bearbeitet:
Hallo und erst mal vielen Dank für die Antworten,

leider das nicht mit dem Script von Zod er meldet mir "Illegal offset type in
$a[$db[current($db)][1]] = $db[current($db)][0];"

und gibt nur aus:
Array
(
[28] =>
[29] =>
[30] =>
[31] =>
[1] =>
[2] =>
[3] =>
[] =>
)

Ich versuch mal zu erklären wo die Daten her kommen,.
Aus der mysql Db hole ich mir die Daten von $db das sieht so aus:

Array
(
[0] => Array
(
[0] => 21.3
[1] => 1
)

[1] => Array
(
[0] => 19.7
[1] => 2
)
)
die 1 und 2 in dem Array stehen für den Tag (in diesem Fall der 1. und 2.8.08) und in [0] die Temperaturwerte.

Das $tage array erstelle ich mir, den ich möchte nur die werte einer Woche(31 KW) haben, das Array $tage sieht so aus:
Array
(
[0] => 28
[1] => 29
[2] => 30
[3] => 31
[4] => 1
[5] => 2
[6] => 3
)

um nachher mir ein Diagramm anzeigen zu lassen benötige ich ein neues Array was so aussehen soll:
Array
(
[0] => ""
[1] => ""
[2] => ""
[3] => ""
[4] => 21.3
[5] => 19.7
[6] => ""
)
Ich benötige die "" damit im Diagramm eine ganze Woche dargestellt wird, aber nur die tage 1 uns 2 eine Linie darstellen die werte enthalten. Da ich nicht immer von jedem Tag einen Messwert habe.

Mfg Manfred
 
Ups. Ich verwechsel ständig current und key:

PHP:
$a = array_fill_keys($tage, "");
if (count($db)) {
  do {
    $a[$db[key($db)][1]] = $db[key($db)][0];
  } while (next($db));
}

Das geht ;)

Aber meine Frage ist immernoch offen. Wo kommen deine Variablen her? ;)
Gut wäre hier wenn du die SQL Anweisung zeigst und das Script womit du das Array für die Wochentage erstellst. Dein letzter Beitrag ist eigentlich fast genau so wie der erste.
 
Hallo Zod

jetzt geht es fast den er gibt mir nur einen wert aus:

Array
(
[28] =>
[29] =>
[30] =>
[31] =>
[1] =>
[2] => 19.7
[3] =>
)

wenn ich aber ein array so erstelle :
$db = array(array("21.3", "1"),array("19.7", "2"));
dann stimmt es
Array
(
[28] =>
[29] =>
[30] =>
[31] =>
[1] => 21.3
[2] => 19.7
[3] =>
)
woran kann das liegen? ich zeige dir mal meine abfrage rein
PHP:
$f0 = 1217800799;
$f1 = 1217196000;

$ergebnis = mysql_query("SELECT  max(temp),temp_zeit FROM temp WHERE (temp_zeit >= '$f1' AND temp_zeit <= '$f0') GROUP BY DAYOFMONTH(FROM_UNIXTIME(temp_zeit))") or die ("SQL Fehler");

for ($i=0; $i<mysql_num_rows($ergebnis); $i++){ 
    $reihen = mysql_fetch_row($ergebnis);
    $db[] = $reihen;
  }
foreach($db as $key => $value) { 
   $db[$key][1] = date("j", $value[1]); 
  }

mit der letzten funktion wandle ich den Timestamp in tag um.

Mfg Manfred
 
ich wollt ja noch das arry was die Tage erstellt rein stellen:
PHP:
$i9 = $f0;
$i8 = $f1;

while($f1 < $f0+86400) {
  $array1[] = $f1;
  $f1= $f1 + 86400;
 }
$schleife = 7;
$schleife2 = 0;
while ($schleife != 0)	{
  $tag = date("j",$array1[$schleife2]);
  $tage[] = $tag;
  $schleife--;
 $schleife2++;
 }

einen schönen Gruß Manfred
 
Zurück