All pastes #1488970 Raw Edit

Web Service Encoded for PHP

public php v1 · immutable
#1488970 ·published 2009-07-08 23:29 UTC
rendered paste body
<?php// PHP Web Service Encoder// // Takes arbitrary data and encodes it to be returned (usually as a web service)//// Data Formats Supported:// - XML// - JSON// - JSONP (JSON with Padding - Used for Direct <script> Callbacks)//// Known Bugs:// - None//// Example:///*	$dataSet = array	(		'persons' => array		(			array			(				'name' => 'Matan Lurey',				'age'  => 20,				'days' => array				(					1, 3, 5, 7				)			)		)	);		print WebServiceEncoder::encodeData($dataSet);*/// Some Notes:// - XML is not 'well made' to handle data structures. That being said, Array types (in PHP)// are encoded as best as possible.//// array(1, 2, 3) would be// <item>1</item><item>2</item><item>3</item>//// By Matan Lurey// matan [a t] lurey [d o t] org//////////////////////////////////////////////////////////////////////////////////////////////final class WebServiceEncoder{	private static function encodeArrayAsXml($parent, $array)	{		foreach ($array as $item)		{			$childElement = $parent->addChild('item');			self::encodeValueAsXml($childElement, $item);		}	}		private static function encodeDataAsJson($data)	{		return json_encode($data);	}		private static function encodeDataAsJsonP($data, $callbackFunction)	{		return $callbackFunction . '(' . self::encodeDataAsJson($data) . ');';	}		private static function encodeDataAsXml($data)	{		$rootElement = new SimpleXMLElement('<web-service />');		self::encodeValueAsXml($rootElement, $data);				return $rootElement->asXML();	}		private static function encodeObjectAsXml($parent, $object)	{		foreach ($object as $key => $value)		{			$childElement = $parent->addChild($key);			self::encodeValueAsXml($childElement, $value);		}	}		private static function encodeValueAsXml($parent, $value)	{		switch (gettype($value))		{			case 'array':				if (self::isAssocArray($value))					self::encodeObjectAsXml($parent, $value);				else					self::encodeArrayAsXml($parent, $value);				break;			case 'object':				self::encodeObjectAsXml($parent, $value);				break;			default:				$parent[0] = $value;				break;		}	}		/**	 * @param $data php data to be encoded	 * @param $format type of formatting to be applied	 * @param $optional for jsonp only, the callback function name	 * @return string	 */	public function encodeData($data, $format = 'xml', $optional = 'webService')	{		switch ($format)		{			case 'jsonp':				return self::encodeDataAsJsonP($data, $optional);			case 'json':				return self::encodeDataAsJson($data);			case 'xml':				return self::encodeDataAsXml($data);		}				return null;	}		private static function isAssocArray($array)	{		return (is_array($array) && 			0 !== count(array_diff_key($array, array_keys(array_keys($array)))));	}}