Ich konnte ein ähnliches Problem nicht finden, so hoffe ich, dass Sie mir helfen können.Füllen eines Arrays mit null, wenn leer
Ich versuche, ein Dashboard zu erstellen, wo es einen Überblick über die Top 10 Website-Positionen in der Google-Suche über einen bestimmten Zeitraum gibt. Im Moment holen wir die Daten von Goolge und legen sie in eine Datenbank, danach extrahieren wir die Daten aus der Datenbank und manipulieren sie so, dass sie in ein Highcharts-Diagramm passt.
Das Problem ist, dass nicht jede Seite jedes Mal in den Top 10 ist, also wird es Löcher in den Daten geben.
Ein Array sollte am Ende so aussehen [9,7,8,0,0,10]
für einen Datumsbereich wie diese ["2016-05-15", "2016-05-16", "2016-05-17", "2016-05-18", "2016-05-19", "2016-05-20"]
(eine Null ist für jedes Mal, wenn eine Website nicht in den Top 10 ist). Aber das Ergebnis, das wir jetzt bekommen, ist wie folgt: [9,7,8,10]
(so werden alle Werte an die Vorderseite des Arrays geschoben). Ich habe versucht, die Anzahl der Tage zwischen jedem Mal berechnen die Website in der Top 10, aber das gibt mir ein Array wie [9,9,9,9,8,9]
Dies ist der Code, den ich
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
$matchFound = false;
for($i = 0; $i < count($urlData); $i++) {
if($urlData[$i]["keyword"] == $row["keyword"]){
addDates($row["date"]);
if(!isset($prevDate)){
$urlData[$i]["urlpos"][$row["url"]][] = $row["position"];
$prevDate = $row["date"];
}else {
if(calcDateDiff($prevDate, $row["date"]) > 1){
for($i = 0; $i < calcDateDiff($prevDate, $row["date"]); $i++){
$urlData[$i]["urlpos"][$row["url"]][] = 0;
}
$urlData[$i]["urlpos"][$row["url"]][] = $row["position"];
$prevDate = $row["date"];
}else {
$urlData[$i]["urlpos"][$row["url"]][] = $row["position"];
$prevDate = $row["date"];
}
}
$matchFound = true;
break;
}
}
if (!$matchFound) {
$urlData[] = array(
"keyword" => $row["keyword"],
"urlpos" => array(
$row["url"] => array($row["position"])
)
);
}
}
function calcDateDiff($firstAppearence, $seconAppearance){
$first = strtotime($firstAppearence);
$second = strtotime($seconAppearance);
$days = floor(($second - $first)/(60*60*24));
return $days;
}
Jede Hilfe bisher haben würde geschätzt .
Kann die für calcDateDiff nicht Triggerring korrekt sein, haben Sie die Formate von Daten debugged? – Cristo