在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
数组。很抱歉,这是个错误,我正忙于某项任务,因此出现了此错误。现在修好了