2

嗨,这是我关于 stackoverflow 的第一个问题。

我正在为一个应用程序编写一个表格构建类。

我首先使用下面的代码配置表格。

$table->setPage('page.rows','20');
$table->setPage('page.start','0');

$table->setTable('table.name','customertable');
$table->setTable('table.higlight','true');

$table->setColumn('column.name','id');                          
$table->setColumn('column.key','index');                        
$table->setColumn('column.heading','none');                     
$table->setColumn('column.issort','false');                     
$table->setColumn('column.islink','false');                     
$table->setColumn('column.ischeck','true');                     
$table->insertColumn();                                         

$table->setColumn('column.name','jobref');                                          
$table->setColumn('column.key','job-ref');                      
$table->setColumn('column.heading','RB Ref');                       
$table->setColumn('column.issort','true');                      
$table->setColumn('column.islink','true');                      
$table->setColumn('column.ischeck','false');                
$table->insertColumn();

$table->setColumn('column.name','type');                                            
$table->setColumn('column.key','type');                     
$table->setColumn('column.heading','Job Type');                     
$table->setColumn('column.issort','true');                      
$table->setColumn('column.islink','true');                      
$table->setColumn('column.ischeck','false');                
$table->insertColumn(); 

除了 setColumn 方法之外,值是什么并不重要,通过下面的函数调用将值添加到临时数组中。

public function setColumn($key,$value){
    $this->colParamSet[$key] = $value;      
    }

然后当我完成我的参数列表时,我使用

$table->insertColumn(); 

它在下面调用此代码

public function insertColumn(){
    
    $this->columnConfig[$this->colParamSet['column.name']] = $this->colParamSet;        
        
    print_r($this->columnConfig); #this is for test purposes not part of the final code
    
    }

我希望到目前为止我已经解释了一切正常现在....这里是输出

Array ( 

[id] => Array ( [column.name] => id [column.key] => index [column.heading] => none [column.issort] => false [column.islink] => false [column.ischeck] => true ) 

) 

Array ( 

[id] => Array ( [column.name] => id [column.key] => index [column.heading] => none     [column.issort] => false [column.islink] => false [column.ischeck] => true ) 
[jobref] => Array ( [column.name] => jobref [column.key] => job-ref [column.heading] => RB Ref [column.issort] => true [column.islink] => true [column.ischeck] => false ) 

) 

Array ( 

[id] => Array ( [column.name] => id [column.key] => index [column.heading] => none [column.issort] => false [column.islink] => false [column.ischeck] => true ) 
[jobref] => Array ( [column.name] => jobref [column.key] => job-ref [column.heading] => RB Ref [column.issort] => true [column.islink] => true [column.ischeck] => false ) 
[type] => Array ( [column.name] => type [column.key] => type [column.heading] => Job Type [column.issort] => true [column.islink] => true [column.ischeck] => false ) 

)

每个配置集是表中每一列的设置,指向数组的键是用于从包含表数据的 assoc 数组中提取数据的 db 列名。

我不明白为什么我会得到这种重复的数组。我让它工作的唯一方法是使用下面的代码

public function insertColumn(){
    $this->columnConfig = array();
    $this->columnConfig[$this->colParamSet['column.name']] = $this->colParamSet;        
    $this->colParamSet = array();
    
    
    print_r($this->columnConfig);
    
    }

这可以正常工作并输出我需要的东西,但我一生都无法理解它为什么会起作用,因为似乎我正在完全清除数组,然后用数组插入一个单元格,然后再次清除它,但它的行为不是那样因为我不理解它,所以我不能依赖它,因为我可能已经创建了一个不稳定的黑客,这会在生产中引发不稳定。

我希望我已经使这个问题可以理解。

提前致谢。

抱歉,我忘了显示我试图达到的输出,所以它在下面

Array ( 

[id] => Array ( [column.name] => id [column.key] => index [column.heading] => none         [column.issort] => false [column.islink] => false [column.ischeck] => true ) 
[jobref] => Array ( [column.name] => jobref [column.key] => job-ref [column.heading] =>     RB Ref [column.issort] => true [column.islink] => true [column.ischeck] => false ) 
[type] => Array ( [column.name] => type [column.key] => type [column.heading] => Job Type [column.issort] => true [column.islink] => true [column.ischeck] => false ) 

)

比较代码

我希望我不会因为这个问题太大而惹上麻烦,但我已经生成了下面的代码进行比较

$temp = array(); 
$final = array(); 

function setconfig($key,$value){ 
    global $temp;     
    $temp[$key] = $value; 
    } 

function insertarray(){ 
    global $final, $temp; 
    $final[$temp['config.name']] = $temp; 
    } 

setconfig('config.name','bob'); 
setconfig('config.width','50'); 
setconfig('config.height','50'); 
setconfig('config.class','bobs-box'); 
insertarray(); 

setconfig('config.name','jon'); 
setconfig('config.width','150'); 
setconfig('config.height','150'); 
setconfig('config.class','jons-box'); 
insertarray(); 

setconfig('config.name','sue'); 
setconfig('config.width','150'); 
setconfig('config.height','150'); 
setconfig('config.class','sues-box'); 
insertarray(); 

print_r($final); 

输出是下面的所需输出

Array ( 

[bob] => Array ( [config.name] => bob [config.width] => 50 [config.height] => 50 [config.class] => bobs-box ) 
[jon] => Array ( [config.name] => jon [config.width] => 150 [config.height] => 150 [config.class] => jons-box ) 
[sue] => Array ( [config.name] => sue [config.width] => 150 [config.height] => 150 [config.class] => sues-box ) 
)

那么谁能告诉我数组在对象内的区别以及为什么它的行为方式不同?还是我应该忘记它并使用修复程序并继续前进。

4

2 回答 2

1

你有一个对象$table

$this->columnConfig是该对象的属性。

每次调用该insertColumn()方法时,它都使用与columnConfig以前相同的方法。

当您添加 line$this->columnConfig = array();时,您有点“重置”该属性。

希望你明白。

于 2012-10-13T12:51:10.527 回答
0

对不起,我已经回答了我的问题。当一分钱掉下来时,我意识到我是多么的麻木。

我在数组的构建迭代期间打印了数组,因此这些值似乎重复了自己,但没有。啊!!周末孩子在家的时候,应该学会独自离开。自我介绍的好方法我想哈哈

于 2012-10-13T18:07:37.587 回答