我试图在数组中添加一个字段并返回它,但是根据var_dump
,没有对数组进行任何更改。if块中的指令被执行,数据看起来是正确的。
function addLength($toAdd, $added){
$result = $toAdd;
foreach ($result as $row) {
foreach ($added as $key => $value) {
if($key == $row['id'] ){
$row['length'] = $value;
}
}
}
var_dump($result);
return $result;
}
发布于 2017-03-22 16:37:17
在foreach
loop中处理$row
时,您要处理的变量不是数组中的变量,而是一个副本。如果您想进行持久的更改,则需要使用reference。
function addLength($toAdd, $added){
$result = $toAdd;
foreach ($result as & $row) {
foreach ($added as $key => $value) {
if($key == $row['id'] ){
$row['length'] = $value;
}
}
}
var_dump($result);
return $result;
}
请务必注意,在 foreach
循环完成后,引用仍将存在。它将包含对$result
数组的最后一个元素的引用。要停止此操作,您需要手动对引用执行unset
。
function addLength($toAdd, $added){
$result = $toAdd;
foreach ($result as & $row) {
foreach ($added as $key => $value) {
if($key == $row['id'] ){
$row['length'] = $value;
}
}
}
var_dump($row); // Outputs the last element of your $result array
unset($row);
var_dump($row); // Now undefined.
var_dump($result);
return $result;
}
就像FYI一样,你可以优化你的代码并摆脱第二个foreach循环,这是不必要的。这也会做同样的事情:
function addLength($toAdd, $added){
$result = $toAdd;
foreach ($result as & $row) {
if ( array_key_exists($row['id'], $added) ) {
$row['length'] = $added[$row['id']];
}
}
var_dump($result);
return $result;
}
现在,您只需检查数据是否存在(通过检查数组键),如果存在,则使用它,而不是遍历$toAdd
中的每个项的$added
。
发布于 2017-03-22 16:34:42
foreach
将数组的每个元素复制到一个变量中,因此您所做的更改不会生效。改为更新原始数组:
function addLength($toAdd, $added){
$result = $toAdd;
foreach ($result as $outerKey => $row) {
foreach ($added as $key => $value) {
if($key == $row['id'] ){
$result[$outerKey]['length'] = $value;
}
}
}
var_dump($result);
return $result;
}
发布于 2017-03-22 16:36:02
我认为您想要添加此类型更改
function addLength($toAdd, $added){
$result = $toAdd;
foreach ($result as $first_key => $row) {
foreach ($added as $key => $value) {
if($key == $row['id'] ){
$result[$first_key]['length'] = $value;
}
}
}
var_dump($result);
return $result;
}
如果您没有在索引中添加键值,那么您可以使用以下代码
function addLength($toAdd, $added){
$result = $toAdd;
foreach ($result as $first_key => $row) {
foreach ($added as $key => $value) {
if($key == $row['id'] ){
$result[]['length'] = $value;
}
}
}
var_dump($result);
return $result;
}
https://stackoverflow.com/questions/42957482
复制