辞書の字句データを格納する連想配列があります。ここで$rowArray
と呼ばれる配列から構造の例である:私はスプレッドシートを作成していると私は、上記の配列のキーと同等の見出しの行を作成する必要がforeach()の後に配列値が更新されない
[2] => Array
(
[\lx] => gunu
[\np] => LH
[\ps] => noun
[\ge] => thick grass in the field, thicket
[\gn] => tshutlha
[\lt] =>
[\va] =>
[\cf] =>
[\ce] =>
[\nt] =>
[\oi] => gunu [LH] thick grass in the field, thicket (noun) (Sets. tshutlha)
)
[3] => Array
(
[\lx] => guru
[\np] => S
[\ps] => noun
[\ge] => ankle
[\gn] => lenyenyana
[\xv0] => ʔam guru-ŋǀı̃
[\xe0] => my ankles
[\lt] =>
[\va] =>
[\cf] =>
[\ce] =>
[\nt] =>
[\oi] => guru [S] ankle (noun) (Sets. lenyenyana) (ex. ʔam guru-ŋǀı̃ ‘my ankles’)
)
(例えば見出しは、\ LX \だろうnp \ ps ...)これらの値を$headArray
という別の配列に格納しています。
問題は、一部の配列の値が他の配列よりも大きいため、スプレッドシートを作成するときに列の位置がずれることです。たとえば、上記の[2]
には11個の値がありますが、上記の[3]
には13個の値があります。したがって、スプレッドシートでは、列が正確に一致しませんでした。
したがって、私は最初に(その方法は、それが常に可能で見出しの最大#を持つことになります)$headArray
を移入するために$rowArray
のすべてのキーを反復処理しています:
$headArray = array();
foreach($rowArray as $j=>$rA){
foreach($rA as $r=>$a){
if(!in_array($r, $headArray)){
$pos = array_search($r, array_keys($rA));
array_splice($headArray, $pos, 0, $r);
}
}
}
このコードの出力は配列です正しい順序ですべての可能な見出しを持つ:
Array
(
[0] => \lx
[1] => \np
[2] => \ps
[3] => \ge
[4] => \gn
[5] => \xv0
[6] => \xe0
[7] => \xv1
[8] => \xe1
[9] => \lt
[10] => \va
[11] => \cf
[12] => \ce
[13] => \nt
[14] => \oi
)
そして私は$rowArray
内のエントリのすべてを反復処理するために、このリスト($headArray
)を使用する -のエントリ場合3233に$headArray
のキーがない場合は、スプライスして空白にします。実際には、私はスプレッドシートに空の列を作成しているので、すべてが何であっても整列します。この繰り返しを行うには、私はこのコードを使用します(この記事の最初の配列に比較して)次のように
foreach($rowArray as $j=>$rA){
if(count($rA) < count($headArray)){
$rA_keys = array_keys($rA);
$rA_diff = array_diff($headArray, $rA_keys);
foreach($rA_diff as $di=>$ff){
if(!array_key_exists($ff, $rA)){
$rA = array_slice($rA, 0, $di, true) + array($ff => '') + array_slice($rA, $di, NULL, true);
}
}
}
}
をこのコードの出力は次のとおりです。
Array
(
[\lx] => gunu
[\np] => LH
[\ps] => noun
[\ge] => thick grass in the field, thicket
[\gn] => tshutlha
[\xv0] =>
[\xe0] =>
[\xv1] =>
[\xe1] =>
[\lt] =>
[\va] =>
[\cf] =>
[\ce] =>
[\nt] =>
[\oi] => gunu [LH] thick grass in the field, thicket (noun) (Sets. tshutlha)
)
Array
(
[\lx] => guru
[\np] => S
[\ps] => noun
[\ge] => ankle
[\gn] => lenyenyana
[\xv0] => ʔam guru-ŋǀı̃
[\xe0] => my ankles
[\xv1] =>
[\xe1] =>
[\lt] =>
[\va] =>
[\cf] =>
[\ce] =>
[\nt] =>
[\oi] => guru [S] ankle (noun) (Sets. lenyenyana) (ex. ʔam guru-ŋǀı̃ ‘my ankles’)
)
それは動作しますが、私は思います!だから、心の中でこのような背景知識のすべてで、私の質問は以下のとおりです。これらのforeach
ループの
1.外では、結果が正しく、配列は更新されませんprint()
にもかかわらず。同様に、スプレッドシートに配列を書き込もうとすると、スプライスの更新値とそのすべてが保存されません。だから私の配列が私のforeach
ループで更新されるようにそれを作ることができますか?
2.私がやっていることを論理的にもっと効率的に、より良い方法がありますか?この仕事は私に4日間頭痛を与えています。私の方法が最善であるかどうかはわかりません!
^^これはあなたが探しているものです。 –