我找不到类似的问题,所以我希望你们能帮助我。
我正在尝试构建一个信息中心,其中概述了Google搜索在一段时间内排名前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 :(得分:0)
使用数组中的键,如:
'fishes.com' => position [0=> 10, 1 => 0, 2=> ...]
无论如何,这段代码工作正常:
$a = [9,7,8,0,0,10];
var_dump ($a);
所以也许你没有正确处理和分配。 那么,为什么不尝试更改模式更像是数据库,包括10个顶级网站的日期数组。 其他数组,使用名称映射站点ID。或者只是如果你觉得可以唯一检索到网站名称。这对我来说似乎更容易。