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