php メソッドでオブジェクトを強制的に配列に変換します: 1. 定義された「object_array」メソッドを介して変換; 2. 「json_decode」メソッドを介して変換; 3. 定義された「object2array_pre」メソッドを介して変換します。

#この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター
php オブジェクトを配列
1.
1 2 3 4 5 6 7 8 9 10 11 12 | function object_array( $array ) {
if ( is_object ( $array )) {
$array = ( array ) $array ;
}
if ( is_array ( $array )) {
foreach ( $array as $key => $value ) {
$array [ $key ] = object_array( $value );
}
}
return $array ;
}
|
ログイン後にコピー
2.
1 | $array = json_decode(json_encode(simplexml_load_string( $xmlString )),TRUE);
|
ログイン後にコピー
3.
1 2 3 4 5 6 7 8 9 10 11 12 13 | function object2array_pre(& $object ) {
if ( is_object ( $object )) {
$arr = ( array )( $object );
} else {
$arr = & $object ;
}
if ( is_array ( $arr )) {
foreach ( $arr as $varName => $varValue ){
$arr [ $varName ] = $this ->object2array( $varValue );
}
}
return $arr ;
}
|
ログイン後にコピー
4. データ量が 10W の場合、実行には 1 時間がかかります2 番目に、構造はより複雑になり、3 秒に達する可能性があります。パフォーマンスが低すぎるため、次のように置き換えることができます:
1 2 3 4 | function object2array(& $object ) {
$object = json_decode( json_encode( $object ),true);
return $object ;
}
|
ログイン後にコピー
1 | json_decode(json_encode( $array ),true)
|
ログイン後にコピー
多層配列の目的オブジェクトの変換は非常に簡単なので、WebService で多層の数値を処理するのに便利です。 グループとオブジェクトの変換 [推奨学習: "
PHP ビデオ チュートリアル "]
単純な (配列) と(オブジェクト) は単層データのみを処理できます。多層配列の場合、オブジェクト変換は何も行いません。
json_decode(json_encode($object) を使用すると、オブジェクトを一度に配列に変換できますが、オブジェクト内に gbk などの utf-8 でエンコードされていない非 ASCII 文字が含まれる場合に問題が発生します。中国語、json_encode はもちろんデコードのパフォーマンスも怪しい
以下のコード:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | <?php
function objectToArray( $d ) {
if ( is_object ( $d )) {
$d = get_object_vars( $d );
}
if ( is_array ( $d )) {
return array_map ( __FUNCTION__ , $d );
}
else {
return $d ;
}
}
function arrayToObject( $d ) {
if ( is_array ( $d )) {
return (object) array_map ( __FUNCTION__ , $d );
}
else {
return $d ;
}
}
$init = new stdClass;
$init ->foo = "Test data";
$init ->bar = new stdClass;
$init ->bar->baaz = "Testing";
$init ->bar->fooz = new stdClass;
$init ->bar->fooz->baz = "Testing again";
$init ->foox = "Just test";
$array = objectToArray( $init );
$object = arrayToObject( $array );
print_r( $init );
echo "\n";
print_r( $array );
echo "\n";
print_r( $object );
?>
|
ログイン後にコピー
以上がPHPでオブジェクトを配列に強制する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。