1

我正在构建一个包含复杂数据的应用程序,我使用数组。一些数据直接来自 postgresql 数据库,一些来自计算和处理。

我最初构建了包含所有这些的数组,并且一切都进行得很好。

稍后在处理过程中,我有以下代码。这是我的代码的一部分。

    foreach ($this -> detailTables as $key => $detTable) {
        foreach ($detTable['columns'] as $key2 => $column) {
            if ($column['isID'] == 't') {
                $detTable['mainid'] = $column['columnName'];
            }
            if ($column['lookupTable'] != '') {
                $select = array('table' => $column['lookupTable'], 'id' => $column['lookupID'], 'disp' => $column['lookupDisplay']);
                $detTable['lookups'][] = $select;
            }
        }
        logw($key . ' mainid 1', $detTable['mainid']);
        logw($key.' lookups 1', $detTable['lookups']);
    }

    foreach ($this -> detailTables as $key => $detTable) {
        logw($key . ' mainid 2', $detTable['mainid']);
        logw($key.' lookups 2', $detTable['lookups']);
    }

基本上,我正在扫描 detailTables 及其列以确定和设置mindid查找数组的值

在第二个 foreach 段中,我只是记录值以查看是否持续存在。

我的日志文件内容如下。

列 mainid 1 = columnID
数组列查找 1
 数组 0
  table = 表
  id = tableID
  disp = tableName

tabs mainid 1 = tabID
array tabs lookups 1
 array 0
  table = tables
  id = tableID
  disp = tableName

第二部分的输出为

列 mainid 2
列查找 2
选项卡 mainid 2
选项卡查找 2

我无法弄清楚为什么两个日志部分不相同。

4

2 回答 2

1

根据我对您的结构的理解,您需要在第一次通过后重置迭代

    }
    logw($key . ' mainid 1', $detTable['mainid']);
    logw($key.' lookups 1', $detTable['lookups']);
}
//reset variables here
foreach ($this -> detailTables as $key => $detTable) {
    logw($key . ' mainid 2', $detTable['mainid']);
    logw($key.' lookups 2', $detTable['lookups']);
}
于 2012-04-03T19:36:06.097 回答
0

$detTable应该是参考。所以你应该把第一行改成

 foreach ($this -> detailTables as $key => &$detTable) {
于 2012-04-03T19:34:49.030 回答