有个一个数组,可能是多维的,里面有些值带有特殊符号 比如“ 我用递归加addslashes()转义

没有达到效果 帮忙看看哪错了

$arr=array('ii"',array('one'=>'ec"','two'=>5));

function t(&$arr){

foreach($arr as $v){

if(is_string($v)){

$arr[]=addslashes($v);

}else{

t($v);

}

}

}

t($arr);

echo "";

print_r($arr);

echo '';

前台页面是这么输出的

________________________________________________________

Warning: Invalid argument supplied for foreach() in D:\AppServ\www\index.php on line 22

Array

(

[0] => ii"

[1] => Array

(

[one] => ec"

[two] => 5

)

[2] => ii\"

[3] => ii\\\"

)

回复讨论(解决方案)

你自己对比下$arr=array('ii"',array('one'=>'ec"','two'=>5),'aa"a');function t(& $arr){ foreach($arr as $k => $v){ if(is_string($v)){ $arr[$k] = addslashes($v); }else{ $arr[$k] = t($v); } } return $arr;}t($arr);echo "";print_r($arr);echo '';

可以用 FILTER

$arr = array('ii"',array('one'=>"ec'",'two'=>5));array_walk_recursive($arr, function(&$v) { $v = addslashes($v);} );print_r($arr); Array( [0] => ii\" [1] => Array ( [one] => ec\' [two] => 5 ))

你的代码要这样改$arr=array('ii"',array('one'=>'ec"','two'=>5));function t(&$arr){ foreach($arr as $i=>&$v){ if(is_array($v)){ t($v); }else{ $arr[$i] = addslashes($v); } }}t($arr);print_r($arr);

改成??就可以了。function t(&$arr){foreach($arr as $key=>$v){if(is_string($v)){$arr[$key]=addslashes($v);}else{t($arr[$key]);}}}

我比较喜欢捣乱function t(&$arr){ foreach($arr as $key=>$v){ if(is_string($v)){ $arr[$key]=addslashes($v); }else{ t($arr[$key]); } }}$arr=array('ii"',array('one'=>'ec"','two'=>5));t($arr);Invalid argument supplied for foreach()

改成??就可以了。function t(&$arr){foreach($arr as $key=>$v){if(is_string($v)){$arr[$key]=addslashes($v);}else{t($arr[$key]);}}}

再改一下。function t(&$arr){ foreach($arr as $key=>$v){ if(is_array($v)){ t($arr[$key]); }else{ $arr[$key]=addslashes($v);} }} $arr=array('ii"',array('one'=>'ec"','two'=>'5'));t($arr);print_r($arr);

谢谢楼上几位大神的耐心解答,你们提供的答案都正确,但是并没有指出我的问题所在。我看了一天的代码,终于发现我写的代码问题所在:报错的原因是,$arr=array('ii"',array('one'=>'ec"','two'=>5));我提供的参数进入到函数体内后最有'two'=>5递归到foreach不是一个数组,所以报为foreach提供了无效参数的警告

$arr=array('ii"',array('one'=>'ec"','two'=>5));

function t(&$arr){

foreach($arr as $v){

if(is_string($v)){

$arr[]=addslashes($v); //这里如果用$arr[]只能是在原数组情况下添加了元素

}else{

t( $v); //这里$v打印出来是array('one'=>'ec"','two'=>5) 当它递归重新走到foreach里面已经不是$arr原数组了,是和$arr完全不相关的一个新数组

}

}

}

如下面的写就ok啦!

$arr=array('ii"',array('one'=>'ec"','two'=>5));

function t(&$arr){

foreach($arr as $k=>$v){

if(is_string($v)){

$arr[$k]=addslashes($v);

}else{

if( is_array($v)){ //加上判断后就可以关闭为foreach提供了无效参数的警告

t( $arr[$k]); //这里指的是原数组foreach出来的array('one'=>'ec"','two'=>5)

}

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php addslashes 数组,用递归addslashes函数转义数组相关推荐

  1. php怎么用递归函数遍历多维数组,php递归遍历多维数组的方法

    php递归遍历多维数组的方法 本文实例讲述了php递归遍历多维数组的方法.分享给大家供大家参考.具体如下: function get_array_elems($arrResult, $where=&q ...

  2. Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组

    1. 数组定义 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 2. 声明数组 Go 语言数组声明需要指定元素类型及元素个数,语 ...

  3. C++给函数传数组参数C++给函数传数组参数

    C++给函数传数组参数 在C++中,如果要给一个函数传入一个数组,一般都是传入两个参数一个数组指针和一个数组大小 例: void print_1 (int n, int *datas ) {     ...

  4. linux shell脚本传数组参数,shell脚本----函数和数组

    目录 一.shell函数 1.简介 2.格式 3.函数调用 4.示例演示 5.递归函数 二.shell数组 1.数组 2.Shell 数组的定义 3.获取数组元素 4.元素切片,替换,删除 5.示例演 ...

  5. php递归处理数组,PHP递归实现无限分类数组处理

    PHP递归实现无限分类数组处理 1,php递归算法实现无限分类 递归算法对无限分类的数组进行处理,分两种情况, 一种树状展示(数组包含子数组), 一种非树状展示(子类按照顺序排在父类的下面,不出现数组 ...

  6. php两个数组合并 不使用函数,php数组合并array_merge()函数使用注意事项

    array_merge()函数在php中是对数据进行合并的,可以把多个数组合成一个数组,并且不改变原数组的值了,但今天我在使用array_merge合并数组时碰到几个小细节上的问题,下面我举例子给各位 ...

  7. c语言在函数中返回数组,关于C语言函数返回数组的问题

    关于C语言函数返回一个数组 c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意: 1.该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放. 可以是全局 ...

  8. c语言中自定义函数返回数组,C语言自定义函数返回数组的方法(图文详解)

    C语言自定义函数返回数组的方法(图文详解) 最近看到一些同学问题,有提到说:如何在一个函数中返回数组呢? 能否直接在自定义 函数中,写成char *类型返回值,直接返回呢?,代码如下: 直接返回str ...

  9. php求数组交集的自定义函数,php数组交集函数

    在数学中的交集运算,大家在学习的时候还是比较轻松的.我们在php数组里,可以借助array_intersect()函数对两个数组求交集,最后得到一个想要的交集数据.在正式开始array_interse ...

最新文章

  1. http://www.cnblogs.com/youfan/articles/3216816.html
  2. [LeetCode] 回溯算法
  3. centos 自动挂载磁盘
  4. oracle 11.2.0.5下载,oracle 11.2.0.4和10.2.0.5下载地址
  5. html表格固定行高_Excel表格向Word复制不变形,Word表格向Excel复制不变形,一次全掌握。...
  6. Graphviz安装配置及入门(windows安装亲测)
  7. percona-toolkit 之 【pt-table-checksum】、【pt-table-sync】说明
  8. java终结器_Java的终结器仍然存在
  9. Xadmin添加用户小组件出错
  10. ASP.NET工作笔记之一:图片上传预览及无刷新上传
  11. PyTorch + NumPy这么做会降低模型准确率?
  12. 计算机2020中级考试题,突发!2020年中级考试分值及评分标准大变!
  13. 进度计划表软件测试,如何控制项目进度?项目进度管理中项目计划进度表的制定...
  14. 中国省份区域json
  15. 移动端与pc端的区别
  16. 抖音java解析_Java版抖音解析接口
  17. 如何注册微信小程序的开发账号
  18. 中国现代书画家——袁晓丹、潘文兵、郑锋等
  19. 渗透工具-fscan内网安全漏洞扫描
  20. array方法常用记载

热门文章

  1. cii框架PHP,CII. POSIX Functions - PHP 5 中文文档
  2. 多平台、高颜值的网易云第三方播放器
  3. 那个能力很强的程序员学历造假,被辞退了!
  4. 公司要上监控,选型调研下 Zabbix 和 Prometheus
  5. iOS推送:要支持戴口罩解锁了!以为是黑科技,原来是骗我买iWatch...
  6. 关于HashCode方法,可变对象和内存泄漏问题
  7. 【偶尔一道ctf】xctf adword mobile easy-apk
  8. linux+mmap父子通信_linux库函数mmap()原理?转载
  9. mnn 编译转换工具 win10 2021
  10. v2.matchTemplate图片尺寸问题