空时填充数组为null

时间:2016-06-01 07:40:36

标签: php arrays

我找不到类似的问题,所以我希望你们能帮助我。

我正在尝试构建一个信息中心,其中概述了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;
}

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用数组中的键,如:

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

无论如何,这段代码工作正常:

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

所以也许你没有正确处理和分配。 那么,为什么不尝试更改模式更像是数据库,包括10个顶级网站的日期数组。 其他数组,使用名称映射站点ID。或者只是如果你觉得可以唯一检索到网站名称。这对我来说似乎更容易。