我有两个数组。 第一个($ dcel)看起来像这样:
Array(
[1] => Array
(
[V1] => 5
[V2] => 2
[F1] => 4
[F2] => 1
[P1] => 7
[P2] => 4
)
etc..
第二个($ PctOldNew)看起来像这样:
Array(
[0] => Array
(
[old] => 1
[new] => 3
)
etc..
我正试图找到这个老人的'第一个数组中的值(初始值)。这是我的代码:
foreach ($dcel as $latura) {
for($i = 0; $i <= $nrPct; $i++){
if($PctOldNew[$i]['old'] == $latura[V1]){
$latura[V1] = $PctOldNew[$i]['new'];
}
}
}
如果我输出$ PctOldNew if if statment,输出它是正确的答案,但如果我尝试修改$ latura [V1],$ dcel保持不变。 我试过参考,钥匙......但没有任何作用,我也看不出有什么不对。
答案 0 :(得分:0)
@CrayonViolent它没用,我试了很多次。 我现在正在使用代码进行播放,似乎这样就可以了:
foreach ($dcel as $key => $value) {
foreach ($value as $val) {
for($i = 0; $i <= $nrPct; $i++){
if($PctOldNew[$i]['old'] == $value[V1])
$new = $PctOldNew[$i]['new'];
}
$val = $new;
}
$dcel[$key][V1] = $val;
}
......但我不知道为什么。
答案 1 :(得分:0)
这有效:
编辑:将第二个数组元素添加到$ dcel以显示其工作原理
<?php
$dcel = Array(
'1' => Array
(
'V1' => 1, // <-- note that i changed this value from your original '5' to '1' so that your condition will actually match something, since this example data set doesn't actually have something to match
'V2' => 2,
'F1' => 4,
'F2' => 1,
'P1' => 7,
'P2' => 4
)
'2' => Array
(
'V1' => 5,
'V2' => 2,
'F1' => 4,
'F2' => 1,
'P1' => 7,
'P2' => 4
)
);
$PctOldNew = Array(
'0' => Array
(
'old' => 1,
'new' => 3
)
);
foreach ($dcel as &$latura) { // <-- reference on &$latura
for($i = 0; $i <= $nrPct; $i++){
if($PctOldNew[$i]['old'] == $latura['V1']){
$latura['V1'] = $PctOldNew[$i]['new'];
}
}
}
echo "<pre>";print_r($dcel);
<强>输出强>
Array
(
[1] => Array
(
[V1] => 3
[V2] => 2
[F1] => 4
[F2] => 1
[P1] => 7
[P2] => 4
)
[2] => Array
(
[V1] => 5
[V2] => 2
[F1] => 4
[F2] => 1
[P1] => 7
[P2] => 4
)
)
答案 2 :(得分:0)
另一个奇怪的方法是使用array_walk
array_walk(&$dcel, function($latura){
for($i = 0; $i <= $nrPct; $i++){
if($PctOldNew[$i]['old'] == $latura[V1]){
$latura[V1] = $PctOldNew[$i]['new'];
}
}
});
或array_map
$dcel = array_map(function($latura){
for($i = 0; $i <= $nrPct; $i++){
if($PctOldNew[$i]['old'] == $latura[V1]){
$latura[V1] = $PctOldNew[$i]['new'];
}
}
return $latura;
}, $dcel);
(不确定为什么array_walk
和array_map
反转参数位置)
更新了真正的原因和2个可能的解决方案
您无法修改$latura
的原因是因为您正在使用for...each
循环,它将通过$latura
按值而不是按引用传递。基于这个原因,您还有2个解决方案,
for $dcel as $key => $latura
,然后您可以更改$dcel[$key]
for $dcel as &$latura
,然后您可以直接更改项目答案 3 :(得分:0)
在您的情况下,最方便的方法是使用array_map()
函数
像这样:
$array = array(1,2,3,4,5);
$replacements = array(
array('old'=>1, 'new'=>11),
array('old'=>3, 'new'=>33),
);
$array = array_map(function($element){
global $replacements;
foreach($replacements as $r) if($r['old']==$element) return $r['new'];
return $element;
}, $array);
print_r($array);
结果:
Array ( 11, 2, 33, 4, 5 )