본문 바로가기

'.' Programs/PHP

[PHP] 배열 stdclass <-> array 변환


개발을 하다보면 배열을 자주 다루게 되는데 ..

배열이 아닌것이 배열처럼 보여서 작업할때 헥갈리는 경우가 있다.


그게 바로 stdClass 때문인데.. 


stdClass = 문자열인덱스 배열 구조라고 한다.  (자세한건 잘 모르겠음 ㅡㅡ;)


예) a -> val = "value";


이렇게 선언하면 a 는 stdClass 타입의 클래스가 된다고 함.


---------------------------------------------------------------------------


stdClass 는 Json 을 사용할때도 사용 되기도 한다.

스크립트에서 ajax 사용시 넘기는 데이터 타입을 json 으로 지정하면

넘어가는 데이터가 stdClass로 넘어간다.


이럴경우 일반 배열로 다시 변환 하고 싶다면...


json_decode($aa,true); 로 선언하면 된다.


---------------------------------------------------------------------------


자.. 이제 본론이다.


stdClass -> Array 로 바꾸는 법.


<?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;
		}
	}
 
?>

----------------------------------------------------------------------------

Array -> stdClass


<?php
 
	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;
		}
	}
 
?>

------------------------------------------------------------------------------


예제 


// 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);

--------------------------------------------------------------------------------





1차는 배열이고 2차가 클래스 오브젝트일경우 선택하는 방법

오류 표시 : Cannot use object of type stdClass as array

<?
Array (
[0] => stdClass Object (
[comment_id] => 158
[posting_id] => 208
[writer_id] => doremi
[writer_name] => 도레미
[comment] => ㅋㅋㅋ
[reg_date] => 20110624171220 )

[1] => stdClass Object (
[comment_id] => 159
[posting_id] => 208
[writer_id] => loveme
[writer_name] => 나사랑
[comment] => 우하핫
[reg_date] => 20110627090822 )
)

echo $comment_data[1]->comment_id;

화면 출력 : '159' 출력됨

?>