name = $name;
}
function getName()
{
return $this->name;
}
function cleanTab(&$value)
{
if ($I_pos = strpos($value, ']')) {
$value = substr($value, 0, $I_pos);
}
}
function _findValue(&$values)
{
if (empty($values)) {
return null;
}
$elementName = $this->getName();
if (isset($values[$elementName])) {
return $values[$elementName];
} elseif (strpos($elementName, '[')) {
$myVar = "['" . str_replace(array(']', '['), array('', "']['"), $elementName) . "']";
return eval("return (isset(\$values$myVar)) ? \$values$myVar : null;");
} else {
return null;
}
}
}
// classe Element Sans Eval
class ElementSansEval
{
var $name;
function ElementSansEval($name)
{
$this->name = $name;
}
function getName()
{
return $this->name;
}
function _findValue(&$values)
{
if (empty($values)) {
return null;
}
preg_match_all('/([^\[|\]]+)/', $this->getName(), $A_element);
$return = $values;
// boucle sur la liste des "elements"
foreach ($A_element[0] as $S_element) {
// si l'element existe dans le tableau tmp
if (isset($return[$S_element])) {
$return = $return[$S_element];
} else {
$return = null;
break;
}
}
return $return;
}
}
// ---- TESTS
$values =
array(
'tutu' => array(
'toto' => array(
1 => '0000-0000-0000-0000'
),
'titi' => array(
'tata' => array(
2 => 'EEEE-EEEE-EEEE-EEEE')))
);
// tutu[toto][1]
$elementSansEval = new ElementSansEval('tutu[toto][tata]');
$element = new Element('tutu[toto][tata]');
require_once 'Benchmark/Iterate.php';
$benchSansEval = new Benchmark_Iterate();
$benchSansEval->run(1000, 'elementSansEval->_findValue', $values);
$resultSansEval = $benchSansEval->get();
$bench = new Benchmark_Iterate();
$bench->run(1000, 'element->_findValue', $values);
$result = $bench->get();
echo "SANS Eval mean : {$resultSansEval{'mean'}}
\n";
echo "AVEC Eval mean : {$result{'mean'}}
\n";
?>