我有两个桌子。一个是位置名称列表,另一个是公司列表,其中一个字段存储公司可能在以下多个位置运营的公司:
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公司运行此程序,我希望从上面获得四个位置的列表,但我只会得到第一个位置(阿伯丁)。我尝试了所有我能想到的组合,但没有成功。我需要以这种方式保持数据的结构化,因为我打算有一个选择倍数来插入并在可以工作时编辑数据。 有什么想法我要去哪里吗?
答案 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
循环遍历新创建的数组。