代码之家  ›  专栏  ›  技术社区  ›  T1960CT

php数组长度

  •  0
  • T1960CT  · 技术社区  · 7 年前

    所以这个解释可能有点冗长,但我会尽量使它简洁。

    我有一个DB查询,它引入了3个不同的标记ID,其中2个与4个集线器ID关联,而1个仅与3关联。

    我返回所有标记,并按id对结果进行排序(因此标记1的所有4个结果都被分组,2的所有4个结果,3的所有3个结果),如下所示:

    Array
        (
            [0] => 40BD32751DF1
            [1] => 40BD32751DF1
            [2] => 40BD32751DF1
            [3] => 40BD32751DF1
            [4] => 10CEA9FD173A
            [5] => 10CEA9FD173A
            [6] => 10CEA9FD173A
            [7] => 10CEA9FD173A
            [8] => 10CEA9FCFE26
            [9] => 10CEA9FCFE26
            [10] => 10CEA9FCFE26
        )
    

    然后我做一个while循环,循环每个标签id(3x)。其中,我使用array_键在array_列搜索中查找每个标记id的数组索引,计算我有多少个结果(4、4、3),然后使用array键获取该行的数据,并使用loop number将该行数据推送到一个数组中以供以后排序:

    while($currentTag = pg_fetch_assoc($tagList)) {
        $tkeys = array_keys(array_column($tagDataArray, 'devmac'), $currentTag['devmac']);
        $tempArray = array();
        for($k=0; $k < count($tkeys); $k++){
            array_push($tempArray, $tagDataArray[$tkeys[$k]]);
        }
    
    //Then I sort that temporary array so one of the values in the row is the highest:
    
        foreach($tempArray as $sigkey => $sigrow) { 
            $sigsort[$sigkey] = $sigrow['devrssi']; 
        }
        array_multisort($sigsort, SORT_DESC, $tempArray);
        updateArticles($tempArray[0]);
    }
    

    现在问题来自于那个临时数组。第一个ID有4个结果,第二个是4个,第三个是3个, 然而 对于第三个id,尽管我使用每个while循环pass(每个id)重新初始化它,但不知怎的,我仍然在数组中得到4个项。第二个id的第四个结果,最后作为第三个id的第四个结果。

    这怎么可能?我已经想了好几个小时了,但没有任何进展。$tkeys在第三个id上给了我3,所以for循环运行3次,一切都是有意义的,直到数组推到某个东西决定要保留的地方。我甚至在temparray中添加了一个print_r,在它第三次运行之前,它是空的!我不知道它从哪里爬回来。

    谢谢。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Nigel Ren    7 年前

    确保在后续循环中处理数据时,删除所有以前的数据…

    $sigsort= [];
    foreach($tempArray as $sigkey => $sigrow) { 
        $sigsort[$sigkey] = $sigrow['devrssi']; 
    }