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
,但我觉得在每次迭代中调用函数时使用整数更好。