2

こんにちは、これはスタックオーバーフローに関する私の最初の質問です。

アプリケーション用のテーブル構築クラスを作成しています。

以下のコードを使用してテーブルを構成することから始めます。

$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);
    
    }

これは問題なく機能し、必要なものを出力しますが、配列を完全にクリアしてから、1つのセルを配列で挿入してから再度クリアしているように見えるため、なぜそれが機能するのか理解できませんが、そのように動作しませんそして、私はそれを理解していないので、本番環境でぐらつく不安定なハックを作成した可能性があるため、それに頼ることはできません。

この質問が理解できるようになったことを願っています。

前もって感謝します。

申し訳ありませんが、達成しようとしていた出力を表示するのを忘れていたので、以下に示します

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

オブジェクトが 1 つあります$table

$this->columnConfigそのオブジェクトのプロパティです。

メソッドを呼び出すたびに、以前insertColumn()と同じcolumnConfigものが使用されます。

行を追加すると、$this->columnConfig = array();そのプロパティが「リセット」されます。

ご理解いただければ幸いです。

于 2012-10-13T12:51:10.527 に答える
0

申し訳ありませんが、私は私の質問に答えました。ペニーが落ちたとき、私は自分がどれほど無感覚であるかに気づきました。

配列のビルド反復中に配列を出力していたため、値が繰り返されているように見えますが、そうではありません。DOH!! 子供たちが家にいる週末に一人で出かけることを学ぶべきです。自己紹介の素晴らしい方法です。私はハハだと思います

于 2012-10-13T18:07:37.587 に答える