2016-06-01 83 views
0

我找不到類似的問題,所以我希望你們能幫助我。用空值填充數組爲空

我試圖建立一個儀表板,其中有一段時間的谷歌搜索前10位網站位置的概述。現在我們從Goolge獲取數據並將其放入數據庫,然後從數據庫中提取數據並對其進行處理,使其適合Highcharts圖表。

問題是,並非每個站點每次都排在前10位,所以數據中會出現漏洞。

一個數組應該看起來像[9,7,8,0,0,10]這樣的日期範圍,如["2016-05-15", "2016-05-16", "2016-05-17", "2016-05-18", "2016-05-19", "2016-05-20"](每次站點不在前10位時爲零)。但是我們現在得到的結果是這樣的[9,7,8,10](所以它將所有值推到數組的前面)。我試圖計算該網站的前10名,每次之間的天量,但是這給了我像[9,9,9,9,8,9]

數組這是我至今

$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; 
} 

任何幫助,將不勝感激代碼。

+0

可能for calcDateDiff不能正確觸發,你有調試的日期格式? – Cristo

回答

0

陣列中使用的按鍵,例如:

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

反正這個代碼工作正常:

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

因此,也許你不會處理和正確分配。 那麼,爲什麼不嘗試更改模式更像一個數據庫,種類的日期,其中包含10個熱門站點。 其他數組,將站點標識與名稱進行映射。或者只是直接站點名稱,如果你覺得可以唯一檢索。對我來說,這似乎更容易。