1

この質問に続いて、この関数を使用して配列をオブジェクトに変換し、

function array_to_object($array)
{
    if(!is_array($array)) {
        return $array;
    }

    $object = new stdClass();
    foreach($array as $key => $value)
    {
        $key = (string) $key ;
        $object->$key = is_array($value) ? array_to_object($value) : $value;
    }
    return $object;
}

そう、

$obj =  array('qualitypoint', 'technologies', 'India');

結果、

stdClass Object
(
    [0] => qualitypoint
    [1] => technologies
    [2] => India
)

しかし、この結果を得るには、オブジェクトを配列に戻す必要があります。

Array
(
    [0] => qualitypoint
    [1] => technologies
    [2] => India
)

出来ますか?

4

2 に答える 2

3

何がいいだろうが、そのままではうまくいかない

通常、良い開始方法は、オブジェクトを array に単純にキャストすることです。

$arr = (array) $obj;

オブジェクトが配列に変換される場合、結果は要素がオブジェクトのプロパティである配列になります。キーはメンバー変数名ですが、いくつかの注目すべき例外があります。整数プロパティにはアクセスできません。プライベート変数には、変数名の前にクラス名が追加されています。保護された変数には、変数名の前に「*」が付加されます。これらの先頭に追加された値には、両側に null バイトがあります。

残念ながら、プロパティには「整数」の名前があるため、これは機能しません。


上記のバリエーションは次のとおりですget_object_vars

$arr = get_object_vars($obj);

ここで重要な点の 1 つは、get_object_vars可視性を尊重することです。つまり、 のメソッド内から呼び出すのではないため、 のパブリック プロパティのみが提供されます。$obj$obj

ただし、これもこの場合は機能しget_object_varsません。整数名のプロパティも提供しません。

何が機能しますか(ただし、良くありません)

オブジェクトを反復すると、オブジェクトが持つ可視プロパティ (この場合はプロパティのみ)も得られますがpublic、整数名のプロパティも処理されます。

$arr = array();
foreach($obj as $k => $v) {
    $arr[$k] = $v;
}
于 2012-04-05T13:51:50.933 に答える
2

これを達成する別の方法は次のとおりです。

$array = array(json_decode(json_encode($object), true));

テストしたところ、アクセスできないプロパティに問題はありませんでした。

更新:それはまた動作します

$object = new stdClass();
$object->{0} = 'qualitypoint';
$object->{1} = 'technologies';
$object->{2} = 'India';
于 2012-04-05T14:01:14.933 に答える