За последние 24 часа нас посетили 18765 программистов и 1729 роботов. Сейчас ищут 1048 программистов ...

Получить элемент массива по ключу (вне зависимости от регист

Тема в разделе "PHP для новичков", создана пользователем bobroff, 19 мар 2010.

  1. bobroff

    bobroff Активный пользователь

    С нами с:
    20 мар 2009
    Сообщения:
    44
    Симпатии:
    0
    Здравствуйте.

    К примеру есть массив
    PHP:
    1.  
    2. $values = array(
    3.    'Black' => 87,
    4.    'Green' => 21,
    5.    'White' => 43
    6. );
    7.  
    Необходимо получить элемент массива по ключу и присвоить ему значение. Условие осложняется тем, что элемент массива необходимо получить вне зависимости от регистра.
    Пример:

    PHP:
    1.  
    2. function setValue($name,$value)
    3. {
    4. $values[$name] = $value;
    5. }
    6.  
    Например, передав в функцию параметр $name равный 'BLACK', 'black' или 'blACk', значение должно присвоиться только элементу массива $values['Black'].

    Как это сделать?

    Заранее спасибо...

    P.S.: вариант хранения индексов массива в верхнем или нижнем регистре не предлагать...
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1.  
    2. <?php
    3. function setVal(&$array, $key, $val)
    4. {
    5.     foreach ($array as $k => &$v)
    6.     {
    7.         if(strtolower($k) == strtolower($key))
    8.         {
    9.             $v = $val;
    10.             break;
    11.         }
    12.     }
    13. }
    В качестве аватара разрешены только личные фото.
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Тьфу ты
    PHP:
    1. <?php
    2. function getVal(&$array, $key, $val)
    3. {
    4.     foreach ($array as $k => &$v)
    5.     {
    6.         if(strtolower($k) == strtolower($key)
    7.         {
    8.             return $val;
    9.         }
    10.     }
    11. }
    =)
     
  4. bobroff

    bobroff Активный пользователь

    С нами с:
    20 мар 2009
    Сообщения:
    44
    Симпатии:
    0
    Спасибо, попробую...
     
  5. bobroff

    bobroff Активный пользователь

    С нами с:
    20 мар 2009
    Сообщения:
    44
    Симпатии:
    0
    Кому интересно, вот что получилось.

    Сам код:
    PHP:
    1.  
    2.     final protected function _setModelElementName($modelname, $elementname)
    3.     {
    4.         if($modelname === NULL OR $elementname === NULL) throw new iCore_Model_Element_Exception("NO_REQUIRED_PARAM");  
    5.        
    6.         if(!(is_string($modelname)) OR !(is_string($elementname))) throw new iCore_Model_Element_Exception("WRONG_PARAM_FORMAT");
    7.  
    8.         if($this->_getModelName() === NULL) throw new iCore_Model_Element_Exception("NO_MODELS_NAME");
    9.        
    10.         if(!($this->_isModel($modelname))) throw new iCore_Model_Element_Exception("NOT_MODEL",$modelname);      
    11.        
    12.         if(!($this->_isModelElement($modelname, $elementname))) throw new iCore_Model_Element_Exception("NOT_MODEL_ELEMENT",array($elementname,$modelname));
    13.        
    14.         if(!($this->_hasModelName($modelname))) throw new iCore_Model_Element_Exception("MODEL_NOT_DECLARE_IN_ELEMENT", array($modelname,$this->getElementName()));
    15.  
    16.         if(!(array_key_exists(strtolower($modelname),array_change_key_case($this->_modelElementName,CASE_LOWER))))
    17.         {
    18.             $this->_modelElementName[$modelname] = array($elementname);    
    19.         }
    20.         else
    21.         {
    22.             foreach($this->_modelElementName as $currentmodelname => $currentmodelelements)
    23.             {      
    24.                 if(strtolower($currentmodelname) === strtolower($modelname))
    25.                 {
    26.                     if(array_search(strtolower($elementname),array_map('strtolower',$currentmodelelements)) === false)
    27.                     {  
    28.                          array_push($this->_modelElementName[$currentmodelname],$elementname);    
    29.                     }      
    30.                 }
    31.            }          
    32.         }
    33.        
    34.         Zend_Debug::dump($this->_modelElementName);
    35.         return $this;
    36.     }
    37.  
    Код в классе-наследнике:
    PHP:
    1.  
    2.         $this->_setModelElementNames(array(
    3.             'User' => 'Id',
    4.             'user' => 'id',
    5.             'USER' => 'ID',
    6.             'Message'  => array('Id'),
    7.             'UserScore'    => array('Id','Point','POINT'),  
    8.         ));
    9.  
    Var_dump выходе после каждой итерации:
    PHP:
    1.  
    2. array(1) {
    3.   ["User"] => array(1) {
    4.     [0] => string(2) "Id"
    5.   }
    6. }
    7.  
    8. array(1) {
    9.   ["User"] => array(1) {
    10.     [0] => string(2) "Id"
    11.   }
    12. }
    13.  
    14. array(1) {
    15.   ["User"] => array(1) {
    16.     [0] => string(2) "Id"
    17.   }
    18. }
    19.  
    20. array(2) {
    21.   ["User"] => array(1) {
    22.     [0] => string(2) "Id"
    23.   }
    24.   ["Message"] => array(1) {
    25.     [0] => string(2) "Id"
    26.   }
    27. }
    28.  
    29. array(3) {
    30.   ["User"] => array(1) {
    31.     [0] => string(2) "Id"
    32.   }
    33.   ["Message"] => array(1) {
    34.     [0] => string(2) "Id"
    35.   }
    36.   ["UserScore"] => array(1) {
    37.     [0] => string(2) "Id"
    38.   }
    39. }
    40.  
    41. array(3) {
    42.   ["User"] => array(1) {
    43.     [0] => string(2) "Id"
    44.   }
    45.   ["Message"] => array(1) {
    46.     [0] => string(2) "Id"
    47.   }
    48.   ["UserScore"] => array(2) {
    49.     [0] => string(2) "Id"
    50.     [1] => string(5) "Point"
    51.   }
    52. }
    53.  
    54. array(3) {
    55.   ["User"] => array(1) {
    56.     [0] => string(2) "Id"
    57.   }
    58.   ["Message"] => array(1) {
    59.     [0] => string(2) "Id"
    60.   }
    61.   ["UserScore"] => array(2) {
    62.     [0] => string(2) "Id"
    63.     [1] => string(5) "Point"
    64.   }
    65. }
    66.