2017-07-10 129 views
0

我有三個數組,例如multiarrayvalsarrayotherarrayotherarray是一個多維數組,它提供的值爲multiarrayvalsarray,但除此之外,這裏並不重要。 valsarrayotherarray取從每個值的一個子陣列的值和multiarray需要從otherarray直值,如下面所示:修改多維數組的當前值

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

現在我想做的是在valsarray每個鍵/值對附加到當前陣列的multiarray,進入實現類似的結果:

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

我試圖以下列方式來解決這個使用current

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')); 

因此,如果多陣列是一個普通數組,而不是一個多維的,我會做這樣的事情:

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

要達到的最終結果。

回答

0

如果我誤解了某些東西,我並不是100%確定你正在努力完成Minimal, Complete, and Verifiable example

看來current()函數不能像你所假設的那樣工作。 (或者更具體地說,內部指針)。 如果您看一下PHP文檔中的示例:Current(),您會看到,要更改元素的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

我修改了我的答案,以包含我想要發生的事例。謝謝您對'current'的信息 – yanman1234

+0

好的,仍然沒有看到問題,@ yanman1234。我認爲我的問題的一部分似乎有太多'foreach'循環。 '$ otherarray'似乎不是一個完全的多維數組,所以有時第二個'foreach'將迭代一個字符串。 (我不這麼認爲)。我認爲這會有幫助,以顯示任何值,以便主foreach循環至少循環兩次,或顯示我的答案是不正確的(因爲它可能是)。 –

+0

對不起,我在'$ otherarray'中省略了外部數組,現在已經修復了。現在我的解決方案實際上可以工作,我再次看到它。 '$ valsarray_index'起初讓我困惑,但我現在看到它只是爲'$ sub'插入新密鑰。謝謝! – yanman1234