修改多维数组的当前值

时间:2017-07-10 17:42:54

标签: php arrays

我有三个数组,比如multiarrayvalsarrayotherarrayotherarray是一个多维数组,为multiarrayvalsarray提供值,但除此之外,它在此处并不重要。 valsarrayotherarray中的每个值的子数组中获取值,multiarrayotherarray获取直接值,如下所示:

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

达到最终结果。

1 个答案:

答案 0 :(得分:0)

如果我误解了某些内容,我不能100%确定你要完成的任务Minimal, Complete, and Verifiable example可能会有所帮助。

current()函数似乎无法正常工作。 (或者更具体地说,是内部指针。) 如果您查看PHP文档中的示例:Current(),您会看到current($array)要更改元素,您需要调用next($array)prev($array)。 这些函数移动数组的内部指针。

请注意,在PHP 5中,foreach循环使用内部指针(并在启动循环时重置它),但在PHP 7中,foreach循环不< / i>使用内部指针。

无论如何,我最好的猜测是什么可以帮到你。

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

我不确定你希望最终输出看起来像什么。如果这会产生不正确的信息,那么为输入提供一些特定的数组以及您期望输出的内容是否有用。