为什么这会产生这个:
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);
清理它并使其正常工作
答案 0 :(得分:38)
文档http://php.net/manual/en/control-structures.foreach.php清楚地说明了您遇到问题的原因:
“为了能够直接修改循环中的数组元素,在$ value之前加上&amp ;.在这种情况下,该值将通过引用分配。”
<?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;
}
?>
答案 1 :(得分:6)
尝试
foreach( $store as $key => $value){
$store[$key] = $value.".txt.gz";
}
答案 2 :(得分:5)
数组中的$value
变量是临时的,它不引用数组中的条目
如果要更改原始数组条目,请使用引用:
foreach ($store as $key => &$value) {
// ^ reference
$value .= '.txt.gz';
}
答案 3 :(得分:3)
您正在重写循环中的值,而不是数组中的键引用。
尝试
$store[$key] = $value.".txt.gz";
答案 4 :(得分:3)
传递$value
作为参考:
foreach( $store as $key => &$value){
$value = $value.".txt.gz";
}
答案 5 :(得分:3)
尝试
$catalog = array();
foreach( $store as $key => $value){
$catalog[] = $value.".txt.gz";
}
print_r ($catalog);
OR
foreach( $store as $key => $value){
$store[$key] = $value.".txt.gz";
}
print_r ($store);
取决于您想要实现的目标
由于 :)
答案 6 :(得分:2)
数组映射怎么样:
$func = function($value) { return $value . ".txt.gz"; };
print_r(array_map($func, $store));
答案 7 :(得分:2)
我相信这就是你想要做的事情:
foreach( $store as $key => $value){
$store[$key] = $value.".txt.gz";
}
unset($value);
print_r ($store);
答案 8 :(得分:2)
foreach(array_container as & array_value)
是在foreach循环中修改数组元素值的方法。