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]   

> Описание: Типа обьяснил
etoYA
Отправлено: 12 Февраля, 2013 - 23:11:53
Post Id



Участник


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


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




Видел такое

Можно ли из этого массива создать свойства?

CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [test] => Array
  3.         (
  4.             [t1] => test1
  5.             [t2] => test2
  6.         )
  7.  
  8.     [check] => Array
  9.         (
  10.             [c1] => check1
  11.             [c2] => check2
  12.         )
  13.  
  14. )
  15.  

(Отредактировано автором: 12 Февраля, 2013 - 23:24:52)

 
 Top
DeepVarvar Супермодератор
Отправлено: 12 Февраля, 2013 - 23:27:00
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




http://habrahabr[dot]ru/post/127711/ Это?
(Добавление)
Вообще я могу подсоветовать тупо вот так:
PHP:
скопировать код в буфер обмена
  1. function makeObjectFromArray(array $arr) {
  2.   $obj = array();
  3.   foreach ($arr as $k => $v) {
  4.     $obj[$k] = is_array($v) ? makeObjectFromArray($v) : $v;
  5.   }
  6.   return (object) $obj;
  7. }
Не тестил, но написав на коленке смысл передал.
 
 Top
etoYA
Отправлено: 12 Февраля, 2013 - 23:35:22
Post Id



Участник


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


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




DeepVarvar, незнаю, возможно)).
 
 Top
Stierus Супермодератор
Отправлено: 12 Февраля, 2013 - 23:36:39
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




А в чем смысл этих манипуляций?
 
My status
 Top
etoYA
Отправлено: 12 Февраля, 2013 - 23:39:49
Post Id



Участник


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


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




Stierus, для понимания сути, не более. Улыбка
 
 Top
DeepVarvar Супермодератор
Отправлено: 12 Февраля, 2013 - 23:40:09
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Stierus пишет:
А в чем смысл этих манипуляций?
Хз, наверное просто для красоты, или понтов.
Мне оно тоже не нравится. Правда есть грешок у самого. После парсинга *.ini файла я получаю массив, и потом перегоняю его в объект. И то там цикл и рекурсия у меня обусловлены тем, что я проверяю значение параметра на булевый тип и в некоторых случаях привожу к явно булевому.
 
 Top
DelphinPRO
Отправлено: 12 Февраля, 2013 - 23:43:07
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




DeepVarvar, наоборот Улыбка из массива в объект


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Stierus Супермодератор
Отправлено: 12 Февраля, 2013 - 23:45:56
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




PHP:
скопировать код в буфер обмена
  1. class obj {
  2.         private $data = array();
  3.        
  4.         public function __construct($data){
  5.                         $this->data = $data;
  6.         }
  7.  
  8.         public function __get($paramName){
  9.                 if(!array_key_exists($paramName, $this->data){
  10.                         return Null;
  11.                 }
  12.                
  13.                 if(is_array($this->data[$paramName])){
  14.                         return new obj($this->data[$paramName]);
  15.                 }
  16.                 return $this->data[$paramName];
  17.         }
  18. }
  19.  
  20.  
  21.  



На коленке набросал для передачи сути, не тестил, не оптимизировал
 
My status
 Top
DeepVarvar Супермодератор
Отправлено: 12 Февраля, 2013 - 23:46:03
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




DelphinPRO пишет:
наоборот Улыбка из массива в объект
DeepVarvar пишет:
(Добавление)
Вообще я могу подсоветовать тупо вот так:
PHP:
скопировать код в буфер обмена
  1. function makeObjectFromArray(array $arr) {
  2.       $obj = array();
  3.       foreach ($arr as $k => $v) {
  4.         $obj[$k] = is_array($v) ? makeObjectFromArray($v) : $v;
  5.       }
  6.       return (object) $obj;
  7.     }

Не тестил, но написав на коленке смысл передал.
 
 Top
etoYA
Отправлено: 12 Февраля, 2013 - 23:49:21
Post Id



Участник


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


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




Stierus, да, про __set и __get знаю, даже пробовал сделать так, но про возвращение обьекта не подумалУлыбка
 
 Top
DelphinPRO
Отправлено: 12 Февраля, 2013 - 23:50:00
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




могу такой изврат предложить Улыбка
PHP:
скопировать код в буфер обмена
  1. header ('Content-type: text/plain; charset=utf-8');
  2. // header ('Content-type: text/html; charset=utf-8');
  3.  
  4. $a = Array(
  5.         'test' => Array(
  6.                 't1' => 'test1',
  7.                 't2' => 'test2'),
  8.         'check' => Array(
  9.                 'c1' => 'check1',
  10.                 'c2' => 'check2')
  11. );
  12. print_r($a);
  13.  
  14. $o = json_decode(json_encode($a,  JSON_FORCE_OBJECT));
  15. print_r($o);
  16.  
  17. echo $o->check->c1; // check1


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
DeepVarvar Супермодератор
Отправлено: 12 Февраля, 2013 - 23:51:00
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




etoYA пишет:
но про возвращение обьекта не подумал
Упс:

(Добавление)
DelphinPRO пишет:
могу такой изврат предложить
Клевый вариант. Еще бы калбек туда кастомный засунуть можно было, вообще бы красота была. Закатив глазки
 
 Top
etoYA
Отправлено: 12 Февраля, 2013 - 23:52:29
Post Id



Участник


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


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




Всем спасибо, суть понял, другого и не хотел, этот изврат мне пока не нуженУлыбка
Как ручеек заполнится всем обязательно поставлю + Улыбка)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB