2016-06-01 12 views
0

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 .

+0

Kann die für calcDateDiff nicht Triggerring korrekt sein, haben Sie die Formate von Daten debugged? – Cristo

Antwort

0

Mit den Tasten im Array wie:

'fishes.com' => position [0=> 10, 1 => 0, 2=> ...] 

Wie auch immer, dieser Code funktioniert:

$a = [9,7,8,0,0,10]; 
var_dump ($a); 

Vielleicht sind Sie nicht die Handhabung und die Zuordnung korrekt. Warum also versuchen Sie nicht, das Schema mehr wie eine DB zu ändern, ein Array von Daten, das die 10 Top-Sites enthält. Anderes Array, das die Site-ID mit dem Namen verknüpft. Oder einfach nur den Site-Namen, wenn Sie das Gefühl haben, dass er eindeutig abgerufen werden kann. Es scheint mir einfacher Ansatz zu sein.

Verwandte Themen