2017-07-10 16 views
0

私は3つの配列、たとえばmultiarray,valsarrayおよびotherarrayを持っています。 otherarrayは、multiarrayvalsarrayに値を供給する多次元配列ですが、それ以外にはここでは重要ではありません。 valsarrayotherarrayの各値のサブアレイから値を受け取り、以下に示すようmultiarrayは、otherarrayから直接値をとる:多次元配列の現在の値を変更する

foreach($otherarray as $other){ 
    foreach($other as $sub){ 
     $valsarray[] = $sub 
    } 
    $multiarray[] = array('Val1' => $other['Val1'], 'Val2' => $other['Val2']); 
} 

今はやりたいものを現在のアレイにvalsarrayに各キー/値のペアを追加していますmultiarrayのエントリと同様の結果を達成するために:私は、次の方法でcurrentを使用してこの問題を解決しようと試みてきた

$multiarray = array('Val1' => $other['Val1'], 'Val2' => $other['Val2'], 
'VALSARRAY_KEY1' => VALSARRAY_VALUE1, ..., 'VALSARRAY_KEYN' => VALSARRAY_VALUEN) 

を:

foreach($valsarray as $key => $val){ 
    current($multiarray)[$key] = $val; 
} 

しかし、multiarrayは変わりません。私はどのようにcurrentが動作するか、またはこの問題に近づく方法を誤解している可能性がありますので、どんなヘルプや方向性も理解できます。

編集 - 例

otherarray = array(...prior array entries..., 
        array('Val1' => 'abc', 
         'Val2' => 'cde', 
         'Val3' => 'not important', 
         'Val4' => array(0 => 'subA', 1 => 'subB'), 
        ...next array entries...); 

BEFORE MERGE: 
multiarray = array(...prior entries..., 
        array('Val1' => 'abc', 
         'Val2' => 'cde')); 
valsarray = array(0 => 'subA', 1 => 'subB'); 

AFTER MERGE: 
multiarray = array(...prior entries..., 
        array('Val1' => 'abc', 
         'Val2' => 'cde', 
          0 => 'subA', 
          1 => 'subB')); 

マルチアレイではなく、多次元1の規則的に配列したのであれば、私のようなものだろう。最終的な結果を達成するために

foreach($valsarray as $key => $val){ 
    $multiarray[$key] = $val; 
} 

を。

答えて

0

Minimal, Complete, and Verifiable exampleを達成しようとしていることを100%確信していないと、誤解があった場合に役立ちます。

current()の機能が動作しないようです。 (具体的には、内部ポインター) PHPドキュメントの例を参照すると、current($array)が要素を変更する場合、next($array)またはprev($array)に電話する必要があります。 これらの関数は配列の内部ポインタを移動します。 PHP 5で、foreachループが内部ポインタを使用する(そして、あなたがループを開始するときにそれをリセットする)こと

ますが、PHP 7で、foreachループはは内部ポインタを使用しないでください。

とにかく、ここで私はあなたを助けることができるものを推測します。

$valsarray_index = 0; 
foreach ($otherarray as $other) { 
    $multiarray_value = array('Val1' => $other['Val1'], 'Val2' => $other['Val2']); 
    foreach ($other as $sub) { 
     $multiarray_value[$valsarray_index] = $sub; 
     // $multiarray_value["VALSARRAY_KEY" . $valsarray_index] = $sub; 
     $valsarray[] = $sub; 

     $valsarray_index += 1; // This stays in lockstep with the last index of $valsarray 
    } 
    $multiarray[] = $multiarray_value; 
} 

最終的な出力がどのように表示されるかはっきりしていません。これが不正確な情報を生成する場合、入力のための特定の配列と出力として期待するものを提供することは役に立ちます。

+0

私は、私が何をしたいのかの例を含めるように答えを変更しました。あなたのために現在の情報のお知らせありがとう – yanman1234

+0

さて、まだ問題は見えていない、@ yanman1234。私の問題の一部は、あまりにも多くの 'foreach'ループがあるようだと思います。 '$ otherarray'は完全な多次元配列ではないように見えるので、2番目の' foreach'が文字列に対して繰り返し処理されることがあります。 (私はこれを意図しているとは思わない)。どちらかの値を表示すると、メインのforeachループが少なくとも2回ループするように表示されるか、(おそらくそうであるように)私の答えが間違っているかを示すのが役に立ちます。 –

+0

申し訳ありませんが、 '$ otherarray'に外側の配列を残しましたが、今修正されています。あなたのソリューションは実際には今私は再びそれを見て動作します。 '$ valsarray_index'が最初は私を混乱させましたが、今は' $ sub'を挿入するための新しいキーを作るだけです。ありがとうございました! – yanman1234