Fonction transformer un tableau en objet

Contenu du snippet

Bon, honnêtement, je n'ai pas encore trouvé d'utilité à cette fonction, mais je l'ai codé, donc autant en faire profiter les autres !
Donc c'est simple, vous avez un tableau du style:

array('test1' => 'valeur', 'test2', 'test3' => array(1, 3))

j'ai fait exprès de faire des types de clé différentes... La fonction gère les tableaux multidimensionnels.

pour obtenir un objet, il suffit d'écrire:

$objet = array_to_object($tableau, 'nomdelaclasse');

si vous aviez une valeur d'enregistrée sous $tableau['key'], elle sera accessible par $objet->key

$tableau contient le tableau source et 'nomdelaclasse' est le nom de la classe permettant la construction de l'objet.
Attention, si vous avez des clès de tableau numérique comme $tableau[2], elle ne sera pas ajoutée a l'objet, (car $tableau->2, c'est invalide !) sauf si vous définissez un 3e argument:

$objet = array_to_object($tableau, 'nomdelaclasse', '_');

le 3e argument est un préfixe. En utilisant cette méthode, $tableau[2] donnera $objet->_2 (et ça c'est valide!)

Voilà, au bonheur de celui qui en aura trouvé une utilité interressante ;)

Source / Exemple :


<?php

function array_to_object($array, $class_name, $numbers = false)
{
	if ( is_array($array) && count($array) > 0 )
	{
		$var_names = array();
		$var_values = array();

		foreach ( $array as $key => $value )
		{
			if ( !is_numeric($key) )
			{
				$value = serialize($value);

				$var_names[] = '$' . $key;
				$var_values[] = '$this->' . $key . ' = unserialize(\'' . $value . '\');';
			}
			elseif ( $numbers != false )
			{
				$value = serialize($value);

				$var_names[] = '$' . $numbers . $key;
				$var_values[] = '$this->' . $numbers . $key . ' = unserialize(\'' . $value . '\');';
			}
		}

		eval('class ' . $class_name . ' {' . "\n" . 'var ' . implode(', ', $var_names) . ';' . "\n" . 'function ' . $class_name . '() {' . "\n" . implode("\n", $var_values) . "\n" . '}' . "\n" . '}' . "\n" . '$object = new ' . $class_name . ';');

		return $object;
	}
	else
	{
		return false;
	}
}

?>

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.