php - 在 foreach 循环中更改值不会更改正在迭代的数组中的值

标签 php foreach

为什么会这样:

foreach( $store as $key => $value){
$value = $value.".txt.gz";
}

unset($value);

print_r ($store);

Array
(
[1] => 101Phones - Product Catalog TXT
[2] => 1-800-FLORALS - Product Catalog 1
)

我正在尝试获取 101Phones - 产品目录 TXT.txt.gz

有什么想法吗?

编辑:好吧,我找到了解决方案......我数组中的变量有我看不到的值......正在做

$output = preg_replace('/[^(\x20-\x7F)]*/','', $output);
echo($output);

清理它并使其正常工作

最佳答案

文档 http://php.net/manual/en/control-structures.foreach.php清楚说明您遇到问题的原因:

“为了能够在循环中直接修改数组元素,在 $value 之前加上 &。在这种情况下,将通过引用分配值。”

<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // break the reference with the last element
?>

仅当可以引用迭代数组时(即,如果它是一个变量),才可能引用 $value。以下代码将不起作用:

<?php
/** this won't work **/
foreach (array(1, 2, 3, 4) as &$value) {
    $value = $value * 2;
}
?>

关于php - 在 foreach 循环中更改值不会更改正在迭代的数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9920619/

相关文章:

php - 从数组在 php 中生成开关案例?

javascript - 当 JavaScript 中的 forEach 或循环提供值时,条件执行

php - 安装 phabricator 时无法连接到 mysql

Php if else 和 html

php - 使用 php 检查 xml 是 atom 还是 rss

C# MySQL 多行结果到组合框

php - Symfony2、 Twig 和 JavaScript

javascript - 使用google api或任何其他方法获取特定范围内的youtube channel 视频

php - 在 PHP foreach 循环中混合数组

ios - SwiftUI 中的 ForEach 在部分之间交换 View (从而重新使用它们),而不是更新数据并尊重 View 修饰符