Php 修改多维数组的当前值

Php 修改多维数组的当前值,php,arrays,Php,Arrays,我有三个数组,比如multiarray,valsarray,和otherarrayotherarray是一个多维数组,它向multiarray和valsarray提供值,但除此之外,它在这里并不重要valsarray从otherarray中每个值的子数组中获取值,multiarray从otherarray中获取直接值,如下所示: foreach($otherarray as $other){ foreach($other as $sub){ $valsarray[] =

我有三个数组,比如
multiarray
valsarray
,和
otherarray
otherarray
是一个多维数组,它向
multiarray
valsarray
提供值,但除此之外,它在这里并不重要
valsarray
otherarray
中每个值的子数组中获取值,
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;
}
但是
多数组
保持不变。我可能误解了当前的如何工作,或者如何处理这个问题,因此任何帮助或指导都将不胜感激

编辑-示例

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'));
因此,如果multiarray是一个规则数组而不是多维数组,我会执行如下操作:

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

实现最终结果。

如果我误解了某些内容,我不能100%确定您想要实现的目标可能会有所帮助

似乎
current()
函数没有像您假设的那样工作。(或者更具体地说,是内部指针。) 如果您查看PHP文档中的示例:,您将看到对于
current($array)
要更改元素,您需要调用
next($array)
prev($array)
。 这些函数用于移动数组的内部指针

请注意,在PHP5中,循环使用内部指针(并在启动循环时将其重置),但在PHP7中,
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;
}

我不太确定您希望最终输出是什么样子。如果这会产生不正确的信息,那么If将有助于为输入和输出提供一些特定的数组。

我修改了我的答案,以包括我希望发生的事情的示例。感谢您提供当前<代码>的信息好的,仍然没有发现问题,@yanman1234。我认为我的问题的一部分是foreach循环似乎太多了
$otherarray
似乎不是完全多维数组,因此有时第二个
foreach
将在字符串上迭代。(我不认为这是有意的)。我认为最好显示两个值,以便主foreach循环至少循环两次,或者显示我的答案有多不正确(可能是这样)。对不起,我在
$otherarray
上遗漏了外部数组,它现在已修复。现在我再看一遍,你的解决方案实际上是可行的。起初,
$valsarray\u索引
让我感到困惑,但现在我看到它只是在为插入的
$sub
创建新键。非常感谢。我本可以用
$multiarray[count($valsarray)]=$sub
替换
$multiarray\u value[$valsarray\u index]=$sub
,但我觉得在每次迭代中调用函数时使用整数更好。