2016-06-01 5 views
0

Не удалось найти подобную проблему, поэтому я надеюсь, что вы, ребята, можете мне помочь.Заполнение массива нулевым пустым

Я пытаюсь создать приборную панель, где есть обзор 10 лучших позиций веб-сайта в поиске Google в течение определенного периода времени. Прямо сейчас мы получаем данные из Goolge и помещаем их в базу данных, после чего извлекаем данные из базы данных и манипулируем ими, чтобы они соответствовали диаграмме Highcharts.

Проблема в том, что не каждый сайт находится в первой десятке каждый раз, поэтому там будут отверстия в данных.

Массив должен выглядеть примерно так в конце [9,7,8,0,0,10] для диапазона дат, подобного этому ["2016-05-15", "2016-05-16", "2016-05-17", "2016-05-18", "2016-05-19", "2016-05-20"] (нуль для каждого сайта не входит в первую десятку). Но результат, который мы получаем прямо сейчас, похож на этот [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

Может ли запуск calcDateDiff корректно срабатывать, вы отлаживали форматы дат? – Cristo

ответ

0

Используйте ключи в массиве как:

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

Во всяком случае, этот код работает отлично:

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

Так может быть, вы не обрабатываете и правильно назначения. Итак, почему бы вам не попытаться изменить схему больше как DB, вроде массива дат, который содержит 10 лучших сайтов. Другой массив, отображающий идентификатор сайта с именем. Или просто имя сайта, если вы чувствуете, что его можно было бы получить однозначно. Казалось бы, для меня это было проще.

Смежные вопросы