Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Получить элемент массива по ключу (вне зависимости от регистра) и присвоить ему значение

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
bobroff
Отправлено: 19 Марта, 2010 - 06:25:24
Post Id



Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Март 2009  


Помог: 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.: вариант хранения индексов массива в верхнем или нижнем регистре не предлагать...


Отредактировано модератором: JustUserR, 19 Марта, 2010 - 19:10:41
 
 Top
JustUserR
Отправлено: 19 Марта, 2010 - 19:00:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




bobroff Во-первых все-таки надо передавать массив по ссылке чтобы в нем можно было изменять значения - а во-вторых для создания регистронезависимой установк можно сделать следующее - сначала вы получаете обычный список ключей и ключи нижнего регистра с помощью http://www.php.su/functions/?arr...-change-key-case - потом с помощью strtolower сравнивате их и узнаете какой ключ соотвествуюет настоящему ключу и устанавлиаете в него значения - конечно все это будет работать только в том случае если ключи уникальные по имени


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Ch_chov
Отправлено: 19 Марта, 2010 - 19:02:48
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Перенесено из темы "Получить элемент массива по ключу (вне зависимости от регистра) и присвоить ему значение"
Цитата:
элемент массива необходимо получить вне зависимости от регистра

В этом случае в массиве могут находится несколько элементов подходящих под это условие.

Если не хочешь преобразовать ключи исходного массива к одинаковому виду. То можно преобразовать внутри функции локальную копию этого массива.
array_change_key_case
 
 Top
vaanyaa
Отправлено: 19 Марта, 2010 - 19:05:07
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Февр. 2010  
Откуда: Киев


Помог: 0 раз(а)




Перенесено из темы "Получить элемент массива по ключу (вне зависимости от регистра) и присвоить ему значение"
может искать совпадение простым перебором массива, и именно на время перебора приводить данные к одному виду
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. function setValue($name,$array){
  3.  
  4. foreach($array as $key => $value){
  5. if(strtolower($name) == strtolower($key)) return $value;
  6.  
  7. }
  8. }
  9.  
  10.  
 
 Top
bobroff
Отправлено: 19 Марта, 2010 - 19:07:26
Post Id



Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Март 2009  


Помог: 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.  


Отредактировано модератором: JustUserR, 19 Марта, 2010 - 19:12:44
Объединил темы с одним и тем же вопросом
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB