Здравствуйте. К примеру есть массив PHP: $values = array( 'Black' => 87, 'Green' => 21, 'White' => 43 ); Необходимо получить элемент массива по ключу и присвоить ему значение. Условие осложняется тем, что элемент массива необходимо получить вне зависимости от регистра. Пример: PHP: function setValue($name,$value) { $values[$name] = $value; } Например, передав в функцию параметр $name равный 'BLACK', 'black' или 'blACk', значение должно присвоиться только элементу массива $values['Black']. Как это сделать? Заранее спасибо... P.S.: вариант хранения индексов массива в верхнем или нижнем регистре не предлагать...
PHP: <?php function setVal(&$array, $key, $val) { foreach ($array as $k => &$v) { if(strtolower($k) == strtolower($key)) { $v = $val; break; } } } В качестве аватара разрешены только личные фото.
Тьфу ты PHP: <?php function getVal(&$array, $key, $val) { foreach ($array as $k => &$v) { if(strtolower($k) == strtolower($key) { return $val; } } } =)
Кому интересно, вот что получилось. Сам код: PHP: final protected function _setModelElementName($modelname, $elementname) { if($modelname === NULL OR $elementname === NULL) throw new iCore_Model_Element_Exception("NO_REQUIRED_PARAM"); if(!(is_string($modelname)) OR !(is_string($elementname))) throw new iCore_Model_Element_Exception("WRONG_PARAM_FORMAT"); if($this->_getModelName() === NULL) throw new iCore_Model_Element_Exception("NO_MODELS_NAME"); if(!($this->_isModel($modelname))) throw new iCore_Model_Element_Exception("NOT_MODEL",$modelname); if(!($this->_isModelElement($modelname, $elementname))) throw new iCore_Model_Element_Exception("NOT_MODEL_ELEMENT",array($elementname,$modelname)); if(!($this->_hasModelName($modelname))) throw new iCore_Model_Element_Exception("MODEL_NOT_DECLARE_IN_ELEMENT", array($modelname,$this->getElementName())); if(!(array_key_exists(strtolower($modelname),array_change_key_case($this->_modelElementName,CASE_LOWER)))) { $this->_modelElementName[$modelname] = array($elementname); } else { foreach($this->_modelElementName as $currentmodelname => $currentmodelelements) { if(strtolower($currentmodelname) === strtolower($modelname)) { if(array_search(strtolower($elementname),array_map('strtolower',$currentmodelelements)) === false) { array_push($this->_modelElementName[$currentmodelname],$elementname); } } } } Zend_Debug::dump($this->_modelElementName); return $this; } Код в классе-наследнике: PHP: $this->_setModelElementNames(array( 'User' => 'Id', 'user' => 'id', 'USER' => 'ID', 'Message' => array('Id'), 'UserScore' => array('Id','Point','POINT'), )); Var_dump выходе после каждой итерации: PHP: array(1) { ["User"] => array(1) { [0] => string(2) "Id" } } array(1) { ["User"] => array(1) { [0] => string(2) "Id" } } array(1) { ["User"] => array(1) { [0] => string(2) "Id" } } array(2) { ["User"] => array(1) { [0] => string(2) "Id" } ["Message"] => array(1) { [0] => string(2) "Id" } } array(3) { ["User"] => array(1) { [0] => string(2) "Id" } ["Message"] => array(1) { [0] => string(2) "Id" } ["UserScore"] => array(1) { [0] => string(2) "Id" } } array(3) { ["User"] => array(1) { [0] => string(2) "Id" } ["Message"] => array(1) { [0] => string(2) "Id" } ["UserScore"] => array(2) { [0] => string(2) "Id" [1] => string(5) "Point" } } array(3) { ["User"] => array(1) { [0] => string(2) "Id" } ["Message"] => array(1) { [0] => string(2) "Id" } ["UserScore"] => array(2) { [0] => string(2) "Id" [1] => string(5) "Point" } }