嗨,这是我关于 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 )
)
那么谁能告诉我数组在对象内的区别以及为什么它的行为方式不同?还是我应该忘记它并使用修复程序并继续前进。