質問

深くネストされたオブジェクト/配列コンボのスラッシュを追加または削除するために使用している2つの関数があります。最初の「レベル」配列のオブジェクトは常にオブジェクトですが、そのプロパティの一部は配列またはオブジェクトです。

ここに私の2つの関数があります:

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\"
                )
        )
)

間違ったことは何ですか?線に沿ったどこかで参照が欠落しています...

他のヒント

foreach は値のコピーを作成します。

foreach 内で objSlash($ arr [$ key]、$ add)の代わりに objSlash($ field、$ add)を使用してみてください。

scroll top