繁体   English   中英

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[...];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM