PHP 在递归函数中按引用传递不起作用
我有两个函数用于在深度嵌套的对象/数组组合中添加或删除斜杠。 数组的第一个“级别”始终是一个对象,但它的某些属性可能是数组或对象。
这是我的两个函数:
function objSlash( &$obj, $add=true )
{
foreach ( $obj as $key=>$field )
{
if ( is_object( $field ) )
objSlash( $field, $add );
else if ( is_array( $field ) )
arrSlash( $field, $add );
else if ( $add )
$obj->$key = addslashes( $field );
else
$obj->$key = stripslashes( $field );
}
return;
}
function arrSlash( &$arr, $add=true )
{
foreach ( $arr as $key=>$field )
{
if ( is_object( $field ) )
objSlash( $field, $add );
else if ( is_array( $field ) )
arrSlash( $field, $add );
else if ( $add )
$arr[$key] = addslashes( $field );
else
$arr[$key] = stripslashes( $field );
}
return;
}
像这样调用:
objSlash( $obj, false );
但是,该函数不会从嵌套数组中删除斜杠。 传入函数的对象是这样的:
stdClass Object
(
[id] => 3
[lines] => Array
(
[0] => Array
(
[character] => Name
[dialogue] => Something including \"quotes\"
)
)
)
我做错了什么? 沿着这条线的某个地方,参考文献丢失了......
I have two functions that I'm using to add or remove slashes from a deeply nested object/array combo. The first "level" of the array is always an object, but some of its properties may be arrays or objects.
Here are my two functions:
function objSlash( &$obj, $add=true )
{
foreach ( $obj as $key=>$field )
{
if ( is_object( $field ) )
objSlash( $field, $add );
else if ( is_array( $field ) )
arrSlash( $field, $add );
else if ( $add )
$obj->$key = addslashes( $field );
else
$obj->$key = stripslashes( $field );
}
return;
}
function arrSlash( &$arr, $add=true )
{
foreach ( $arr as $key=>$field )
{
if ( is_object( $field ) )
objSlash( $field, $add );
else if ( is_array( $field ) )
arrSlash( $field, $add );
else if ( $add )
$arr[$key] = addslashes( $field );
else
$arr[$key] = stripslashes( $field );
}
return;
}
Being called like so:
objSlash( $obj, false );
However, the function does not strip the slashes from the nested array. The object passed into the function is like this:
stdClass Object
(
[id] => 3
[lines] => Array
(
[0] => Array
(
[character] => Name
[dialogue] => Something including \"quotes\"
)
)
)
What have I done wrong? Somewhere along the line a reference is going missing...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
foreach
使用数组/对象的副本,而不是数组/对象本身:因此,请使用引用:
或者使用数组元素/对象属性本身,就像 Kuroki Kaze 建议的那样,使用
$arr[$key]
而不是其复制值$field
。foreach
uses a copy of the array/object and not the array/object itself:So use either a reference:
Or use the array element/object property itself like Kuroki Kaze suggested by using
$arr[$key]
instead of its copied value$field
.我想,
foreach
制作了值的副本。尝试在
foreach
中使用objSlash( $arr[$key], $add )
而不是objSlash( $field, $add )
。foreach
makes a copy of value, i suppose.Try using
objSlash( $arr[$key], $add )
intead ofobjSlash( $field, $add )
insideforeach
.