Skip to content

Instantly share code, notes, and snippets.

@maximevalette
Created April 18, 2011 11:56
Show Gist options
  • Save maximevalette/925189 to your computer and use it in GitHub Desktop.
Save maximevalette/925189 to your computer and use it in GitHub Desktop.
Un snippet pour sortir un tableau
<?php
/**
* @var array $data Le tableau qu'on veut sortir en XML ou JSON(P)
* @var (xml|json) $format Le format de sortie désiré
* @var string $callback Le nom de la fonction à appeler si on veut faire du JSONP
*/
$data = array();
$format = 'xml';
$callback = null;
if ($format == 'xml') {
$xml = new XmlWriter();
$xml->openMemory();
$xml->startDocument('1.0', 'UTF-8');
$xml->setIndent(true);
function write(XMLWriter $xml, $data, $parent = null) {
foreach($data as $key => $value) {
/* Si le nom de la clé ne peut pas se mettre en nom de balise... */
if (!preg_match('/^([a-z_-]+)$/i',$key)) {
/* Si son parent est un pluriel le nom de la balise devient singulier, sinon item */
if (preg_match('/s$/i',$parent)) {
$key = substr($parent,0,strlen($parent)-1);
} else {
$key = 'item';
}
}
/* Si la valeur est un tableau, récursivité */
if (is_array($value)) {
$xml->startElement($key);
write($xml, $value, $key);
$xml->endElement();
continue;
}
/* Sinon on écrit l'élément, avec du CDATA au besoin */
if (preg_match('/<[^>]+>/',$value)) {
$xml->startElement($key);
$xml->writeCData($value);
$xml->endElement();
} else {
$xml->writeElement($key, $value);
}
}
}
/* Affichage */
write($xml, $this->X);
echo $xml->outputMemory(true);
} elseif ($format == 'json') {
/* S'il y a un callback, on sort du JSONP */
if ($callback) {
echo $_REQUEST['callback'] . '(' . json_encode($this->X) . ')';
} else {
echo json_encode($this->X,JSON_FORCE_OBJECT);
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment