在PHP中,将数组与MySQL表中的字段进行比较

时间:2019-02-11 21:08:48

标签: php mysql arrays compare

我有两个桌子。一个是位置名称列表,另一个是公司列表,其中一个字段存储公司可能在以下多个位置运营的公司:

package main

import (
    "fmt"
    "encoding/json"
)

var yourMap = map[string]interface{}{
    "a": 1,
    "b": map[string]interface{}{
        "c": 2,
    },
}


func transform(m map[string]interface{}) (map[string]interface{}, error) {
    newMap := make(map[string]interface{})
    for k, v := range m {
        bytez, err := json.Marshal(v)
        if err != nil {
            return nil, err
        }
        newMap[k] = string(bytez)
    }
    return newMap, nil
}

func main() {
    newMap, err := transform(yourMap)
    if err != nil {
        panic(err)
    }

    b, err := json.Marshal(newMap)
    if err != nil {
        panic(err)
    }

    fmt.Println(string(b))
}

对于每个公司的详细信息页面,我想列出它们运营的地点,并显示每个公司的名称。例如。对于公司B:

id  LocationName
1   Aberdeen
2   Dundee
3   Edinburgh
4   Glasgow


idCompany   CompanyName Locations
1           CompanyA    1, 2, 3, 4
2           CompanyB    2, 4
3           CompanyC    1

从VB的背景来看,我只是遍历每个数据集并比较每个数据集以找到匹配项,但这在PHP中,我无法使其正常工作:

Dundee
Glasgow

为A公司运行此程序,我希望从上面获得四个位置的列表,但我只会得到第一个位置(阿伯丁)。我尝试了所有我能想到的组合,但没有成功。我需要以这种方式保持数据的结构化,因为我打算有一个选择倍数来插入并在可以工作时编辑数据。 有什么想法我要去哪里吗?

2 个答案:

答案 0 :(得分:1)

而不是在数组的迭代过程中循环数据库获取,这导致一旦您到达数组的第二个条目(如您所见,至多一个输出),就没有剩余的数据可读取了,只需循环获取数据库并使用in_array来确定是否输出位置名称:

   while ($rowLocationNames = mysqli_fetch_assoc($rstLocationNames)) {
       if (in_array($rowLocationNames["idLocation"], $LocationArray)) {
           echo $rowLocationNames["LocationName"]."<br />";
       }
   }

答案 1 :(得分:0)

问题是您的while循环嵌套在数据库中,for嵌套在数据库中。在for循环的第一次迭代之后,数据库指针位于记录集的末尾,因此当您进行下一次迭代时,就没有要读取的记录了。

在进入for循环之前,尝试将记录读入数组,然后使用while循环遍历新创建的数组。