PHP foreach用最后一项覆盖所有项


PHP foreach overwrite all items with last item

我知道我问了很多次这个问题,但我没有找到与我相关的东西。我是PHP的新手,现在正在学习如何使用foreach。我得到了这个代码:

foreach($revert_result as $tu => $row){
    $address = $row['Addr.Line2'] . $row['Addr.zip'] . $row['Addr.City'];
}

$row['Addr.Line2']等效果很好,它显示了我想要的信息,但只显示了最后一个元素。所以最后一个元素覆盖了所有其他元素,我不知道为什么。

注意,$row['Addr.Line2']等是来自ERP系统的数据。这应该是正确的,因为它可以显示数据。

有人能解释一下原因吗?或者给我一个如何修复的提示吗?

提前感谢

foreach($revert_result as $tu => $row){
    $address = $row['Addr.Line2'] . $row['Addr.zip'] . $row['Addr.City'];
}

您的foreach循环将循环通过$revert_result数组,并将连接的字符串存储在$address变量中。循环的每次迭代都会覆盖变量值,循环执行完成后,$address变量将包含上次迭代的值。

我相信你需要这里所有的价值观。在这种情况下,您将这些值添加到一个数组中,如下所示:

$addresses[] = array(); // initialize empty array
foreach($revert_result as $tu => $row){
    $addresses[] = $row['Addr.Line2'] . $row['Addr.zip'] . $row['Addr.City'];
}

现在$addresses将包含所有地址值,您可以随心所欲地使用它。

这应该有效:

// declare an empty string variable to hold your addresses
// sometimes PHP error reporting will throw a fit if you try to use $address improperly later
$address = '';
// loop through your results
foreach($revert_result as $tu => $row){
    // concatenate the addresses and add a <br> at the end to make the output legible
    $address.= $row['Addr.Line2'] . $row['Addr.zip'] . $row['Addr.City'] . '<br>';
}
// display your output
echo $address;

或者这个:

// declare an array to store your addresses
// sometimes PHP error reporting will throw a fit if you try to use $address improperly later
$address = array();
// loop through your results
foreach($revert_result as $tu => $row){
    // add a concatenated result item to your array
    // calling $address[] automatically assigns to the next index
    // the first loop will do $address[0]
    // the second loop will do $address[1]
    // the third loop will do $address[2]
    $address[] = $row['Addr.Line2'] . $row['Addr.zip'] . $row['Addr.City'];
}
// use print_r() to nicely display all elements of your array
echo '<pre>'.print_r($address, true).'</pre>';
// You can also loop the $address array and echo
foreach($address as $k=>$v){
    echo $v.'<br>';
}

您可能需要使用数组来保存信息:

$address = array();
foreach($revert_result as $tu => $row){
    $address[] = $row['Addr.Line2'] . $row['Addr.zip'] . $row['Addr.City'];
}
print_r($address);

在循环的第一次迭代中,$revert_result第一行的Addr部分被分配给$address。在循环的第二次迭代中,$revert_result的第二行的Addr部分被分配给$address。在第三次迭代中。。。你明白了。

您正在用一个新值重复覆盖同一个变量,当然,循环后只会保留最后一个值。也许您想创建一个数组:

$addresses = array();
foreach (...) {
    $addresses[] = $row[...];
}

我也遇到了类似的问题,但在foreach循环的每次迭代中,我都在数组的每个元素中保存一个对象。我用于存储新值的数组增加了一个索引,如$myArray[$index](但正如我从以前的答案中了解到的那样,我可以使用$myArray[]),所以我希望每个值都不同,但所有元素都与上一个值相同。

结果发现,对象保存在数组的每个元素中,当我对对象进行更改时,该值都会更新。

为了解决这个问题,我必须在给它分配一个新值后取消设置($myObject),在foreach循环中的第一件事是,我必须用$myObject=new myObject从类中实例化一个新的同类对象;