ホームページ > php教程 > php手册 > PHP のマルチレベル配列とオブジェクトの変換

PHP のマルチレベル配列とオブジェクトの変換

WBOY
リリース: 2016-06-21 08:52:30
オリジナル
1410 人が閲覧しました

多層配列とオブジェクトの変換の目的は非常に単純なので、WebService で多層配列とオブジェクトの変換を処理するのに便利です

シンプル (配列) と (オブジェクト) は単一レベルのデータのみを処理できますが、マルチレベルの配列とオブジェクトの変換については何もできません。

オブジェクトは json_decode(json_encode($object) によって一度に配列に変換できますが、オブジェクト内で gbk 中国語などの utf-8 でエンコードされていない非 ASCII 文字に遭遇すると、パフォーマンスはもちろんの問題が発生します。 json_encode と decode も疑わしいです。

以下のコード:

<?php
 
	function objectToArray($d) {
		if (is_object($d)) {
			// Gets the properties of the given object
			// with get_object_vars function
			$d = get_object_vars($d);
		}
 
		if (is_array($d)) {
			/*
			* Return array converted to object
			* Using __FUNCTION__ (Magic constant)
			* for recursive call
			*/
			return array_map(__FUNCTION__, $d);
		}
		else {
			// Return array
			return $d;
		}
	}
 
	function arrayToObject($d) {
		if (is_array($d)) {
			/*
			* Return array converted to object
			* Using __FUNCTION__ (Magic constant)
			* for recursive call
			*/
			return (object) array_map(__FUNCTION__, $d);
		}
		else {
			// Return object
			return $d;
		}
	}

	// Useage:
	// Create new stdClass Object 	
        $init = new stdClass;
	// Add some test data
	$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";
 
	// Convert array to object and then object back to array
	$array = objectToArray($init);
	$object = arrayToObject($array);
 
	// Print objects and array
	print_r($init);
	echo "\n";
	print_r($array);
	echo "\n";
	print_r($object);
?>
ログイン後にコピー



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート