Php 使用str_replace和foreach从多维数组中删除字符:范围问题?
我有一个数组($arr): 我试图使用这些元素值作为数值,因此需要删除任何非数字字符(上面示例中的逗号) 为此,我正在使用:Php 使用str_replace和foreach从多维数组中删除字符:范围问题?,php,scope,str-replace,Php,Scope,Str Replace,我有一个数组($arr): 我试图使用这些元素值作为数值,因此需要删除任何非数字字符(上面示例中的逗号) 为此,我正在使用: foreach($arr as $k=>$v) { $v[sv_317] = str_replace(",", "", $v[sv_317]); $v[sv_317] = preg_replace('/\s+/', '', $v[sv_317]); $v[sv_318] = str_replace(",", "", $v
foreach($arr as $k=>$v)
{
$v[sv_317] = str_replace(",", "", $v[sv_317]);
$v[sv_317] = preg_replace('/\s+/', '', $v[sv_317]);
$v[sv_318] = str_replace(",", "", $v[sv_318]);
$v[sv_318] = preg_replace('/\s+/', '', $v[sv_318]);
echo "318 :".$v[sv_318];
echo "317 :".$v[sv_317];
}
echos只是为了测试它是否在做我想要做的事情,而且可以肯定的是,它们打印的元素值没有逗号或空格
然而,这并没有导致能够使用数字元素,所以我用print_r($arr)测试了数组;紧接着上面的循环,数组元素似乎不受影响(即仍然包含逗号)
这里是否存在范围问题?如果是,如何永久删除逗号
非常感谢。foreach循环不适用于数组本身。它适用于数组的副本。因此,当您执行
打印($arr)
时,它将显示原始数组。实际数组$arr不会被修改
来自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
?>
查看此SO帖子,了解foreach的实际工作原理:
希望这能回答您的问题:)foreach循环不能与数组本身一起工作。它与数组的副本一起工作。因此,当您执行
print\r($arr)
时,它将显示原始数组。未修改实际数组$arr
来自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
?>
查看此SO帖子,了解foreach的实际工作原理:
希望这能回答您的问题:)因为您试图更改$v,所以它需要是一个参考变量,如下所示:
foreach($arr as $k => &$v) {
$v[sv_318] = str_replace(",", "", $v[sv_318]);
}
…但您的代码中还有更多问题需要解决:
- 最后应该
,这样后续代码的行为就不会奇怪了unset($v)
- 数组索引应该被引用,因为它们是字符串文本李>
- 我更喜欢strtr()而不是str_replace(),因为对应关系更清晰:
foreach ($arr as $key => &$subarr) {
foreach ($subarr as $subkey => &$val) {
$val = strtr( $val, array(','=>'') );
}; unset($val);
}; unset($subarr);
因为您试图更改$v,所以它需要是一个引用变量,如下所示:
foreach($arr as $k => &$v) {
$v[sv_318] = str_replace(",", "", $v[sv_318]);
}
…但您的代码中还有更多问题需要解决:
- 最后应该
,这样后续代码的行为就不会奇怪了unset($v)
- 数组索引应该被引用,因为它们是字符串文本李>
- 我更喜欢strtr()而不是str_replace(),因为对应关系更清晰:
foreach ($arr as $key => &$subarr) {
foreach ($subarr as $subkey => &$val) {
$val = strtr( $val, array(','=>'') );
}; unset($val);
}; unset($subarr);
哦那么,以这种方式编辑数组的最佳方法是什么?创建新(空)数组(循环之前)并在其中添加(推送)更改的值(循环内部)?哦!那么,以这种方式编辑数组的最佳方法是什么?创建新(空)数组(循环之前)并在其中添加(推送)更改的值(循环内部)?