Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP上添加数组上的字段_Php - Fatal编程技术网

在PHP上添加数组上的字段

在PHP上添加数组上的字段,php,Php,我试图在数组中添加一个字段并返回它,但是根据var\u dump,没有对数组进行任何更改。执行if块中的指令,数据似乎正确 function addLength($toAdd, $added){ $result = $toAdd; foreach ($result as $row) { foreach ($added as $key => $value) { if($key == $row['id'] ){

我试图在数组中添加一个字段并返回它,但是根据
var\u 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;
}
更改行:

$row['length'] = $value;  
致:

如果这不起作用,您需要将
foreach($result as$row)
循环更改为:

foreach ($result as $row => $data)
更改行:

$row['length'] = $value;  
致:

如果这不起作用,您需要将
foreach($result as$row)
循环更改为:

foreach ($result as $row => $data)

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

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

我想您想添加这种类型的更改

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

我想您想添加这种类型的更改

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

处理中的
$row
时,处理的不是数组中的同一变量,而是一个副本。如果你想做出持久的改变,你需要使用

请务必注意,
foreach
循环完成后,引用仍将存在。它将包含对
$result
数组最后一个元素的引用。要停止此操作,您需要手动删除引用

    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;
}
仅供参考,您可以优化您的代码并去掉第二个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
中的每个项目循环执行
$add
,只需检查数据是否存在(通过检查数组键),如果存在,则使用它。

在中处理
$row
时,处理的不是数组中的同一个变量,而是一个副本。如果你想做出持久的改变,你需要使用

请务必注意,
foreach
循环完成后,引用仍将存在。它将包含对
$result
数组最后一个元素的引用。要停止此操作,您需要手动删除引用

    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;
}
仅供参考,您可以优化您的代码并去掉第二个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
中的每个项目循环执行
$add
,只需检查数据是否存在(通过检查数组键),如果存在,则使用它。

如果有错误,请更正,但($result as$row)将$row分配给$result中元素的副本。它没有引用$result中的原始元素。Try foreach($result as&$row)
如果确实在foreach循环中使用引用变量,请记住在循环结束后使用unset($row)将其取消设置。

如果错误,请更正,但是($result as$row)将$row分配给$result中元素的副本。它没有引用$result中的原始元素。Try foreach($result as&$row)

如果确实在foreach循环中使用引用变量,请记住在循环结束后使用unset($row)将其取消设置。

如果显示当前结果和期望的结果,这将非常有用!数组应该添加字段“length”,但没有任何更改。
foreach
创建数据的副本。如果更改
$row
(副本),则原始数组(
$result
)不会受到影响。尝试将foreach更改为使用引用:
foreach($result as&$row)
(添加的符号)(&code>)。您的最终$result没有更新,您的$row将在此代码中更新。如果您显示当前的结果和所需的结果,它的可能副本将非常有用!数组应该添加字段“length”,但没有任何更改。
foreach
创建数据的副本。如果更改
$row
(副本),则原始数组(
$result
)不会受到影响。尝试将foreach更改为使用引用:
foreach($result as&$row)
(添加的符号(&S)。您的最终$result未更新,您的$row将在此代码中更新。可能与我的答案的最后一部分重复以更改循环。。。没有关于输入参数的信息,很难提供准确的答案。因此,我的答案的最后一部分是更改循环。。。没有关于输入参数的信息,很难提供准确的答案。@af_inb我已经更新了我的答案,其中还包括一些关于优化代码的信息。我希望这能有所帮助:)@af_inb我已经更新了我的答案,其中还包括一些优化代码的信息。我希望这有帮助:)。这是错误的,你用错了键。您必须使用
foreach($result as$i=>$row)
然后
$result[$i]['length']=$value
仍然错误,
$yourkey
用于
$added
数组,而不是
$result
数组。很抱歉,这是个错误,我正忙于某项任务,因此出现了此错误。现在修好了这是错的,你用错钥匙了。您必须使用
foreach($result as$i=>$row)
然后
$result[$i]['length']=$value
仍然错误,
$yourkey
用于
$added
数组,而不是
$result
数组。很抱歉,这是个错误,我正忙于某项任务,因此出现了此错误。现在修好了