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]   

> Без описания
p2p
Отправлено: 19 Февраля, 2019 - 14:59:46
Post Id



Новичок


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


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




без объекта все норм:
PHP:
скопировать код в буфер обмена
  1.   $d=array();
  2.  
  3.   $d[]=array(1,2,3,4);
  4.   $d[]=array(88,77,66,55,44,33,22,11);
  5.  
  6.   $ix=count($d);
  7.   $d[$ix-1][]='Hello';
  8.   $d[$ix-1][]='World';
  9.  
  10.   foreach($d as $i=>$arr)
  11.     {
  12.      if(gettype($d)=='array')
  13.        {
  14.         $r.= "$i := ";
  15.         foreach($arr as $k=>$v)
  16.           {
  17.            $r.= "${v}[$k], ";
  18.           }
  19.          $r.= "<br>\n";
  20.        }
  21.     }
  22.  
  23.   echo $r;
  24.  



с объектом:

PHP:
скопировать код в буфер обмена
  1.   class TMySheet
  2.     {
  3.      public $d = array();
  4.  
  5.      function AddCell($x)
  6.        {
  7.         if(gettype($this->$d)=='NULL') $ix=0;
  8.         else $ix=count($this->$d);
  9.         $this->$d[$ix-1][]=$x;
  10.        }
  11.  
  12.      function AddRow()
  13.        {
  14.         $this->$d[]=array();
  15.        }
  16.  
  17.      function __toString()
  18.        {
  19.         $r='';
  20.         foreach($this->$d as $i=>$arr)
  21.           {
  22.            if(gettype($arr)=='array')
  23.              {
  24.               $r.= "$i := ";
  25.               foreach($arr as $k=>$v)
  26.                 {
  27.                  $r.= "${v}[$k], ";
  28.                 }
  29.                $r.= "<br>\n";
  30.              }
  31.           }
  32.         return $r;
  33.        }
  34.     }
  35.  
  36.   $sh=new TMySheet();
  37.  
  38.   $sh->AddCell(1);
  39.   $sh->AddCell(2);
  40.   $sh->AddCell(3);
  41.   $sh->AddCell(4);
  42.   $sh->AddRow();
  43.   $sh->AddCell(88);
  44.   $sh->AddCell(77);
  45.   $sh->AddCell(66);
  46.   $sh->AddCell(55);
  47.   $sh->AddCell(44);
  48.   $sh->AddCell(33);
  49.   $sh->AddCell(22);
  50.   $sh->AddCell(11);
  51.   $sh->AddRow();
  52.  
  53.   $sh->AddCell("Hello");
  54.   $sh->AddCell("World");
  55.   $sh->AddRow;
  56.  
  57.   echo $sh;
  58.  


или как в многомерном массиве в объекте получить количество строк, чтоб в эту строку добавить элемент в конец.
(Добавление)
в версии PHP 5.3.13 - вообще с ошибкой валится:
PHP:
скопировать код в буфер обмена
  1. PHP Fatal error:  Cannot use [] for reading in C:\1\tfe4php\tfe1.php on line 10
  2.  
  3. Fatal error: Cannot use [] for reading in C:\1\tfe4php\tfe1.php on line 10
 
 Top
Мелкий Супермодератор
Отправлено: 19 Февраля, 2019 - 15:31:56
Post Id



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


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


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




Включите отображение E_NOTICE.

Вы думаете
PHP:
скопировать код в буфер обмена
  1. public $d = array();
  2. function AddRow()
  3.        {
  4.         $this->$d[]=array();
  5.        }

будет работать со свойством объекта d? Нет, вы заблуждаетесь.
Свойство объекта - это $this->d. А $this->$d - это мы посмотрим в переменную $d, оттуда достанем имя свойства и будет искать именно такое.


-----
PostgreSQL DBA
 
 Top
p2p
Отправлено: 19 Февраля, 2019 - 16:19:52
Post Id



Новичок


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


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




упс, сорри. убрал $

но результат тот же.

выводит в один столбец все. в строку не добавляет ((
 
 Top
Мелкий Супермодератор
Отправлено: 19 Февраля, 2019 - 16:36:34
Post Id



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


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


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




Исследуйте логику работы это скрипта
Хинт:
PHP:
скопировать код в буфер обмена
  1.   $sh=new TMySheet();
  2.   $sh->AddCell(1);
  3.  
  4.   $sh=new TMySheet();
  5.   $sh->AddRow();
  6.   $sh->AddCell(1);

очень сильно по разному себя будут вести. Жаль очередной notice куда-то проглатывается при этом.


-----
PostgreSQL DBA
 
 Top
p2p
Отправлено: 19 Февраля, 2019 - 17:11:08
Post Id



Новичок


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


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




по логике какую закладываю - в пятой строке должна добавиться пустая строка двумерного массива.

а в итоге у меня все в один столбец похапе выводит ((
 
 Top
Мелкий Супермодератор
Отправлено: 19 Февраля, 2019 - 17:28:17
Post Id



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


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


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




p2p пишет:
по логике какую закладываю

Вот именно что написана логика другая. Скрипт работает строго как написан.

Найдите место, где логика выполнения расходится с желаемым поведением. Очень жирный хинт я уже написал.


-----
PostgreSQL DBA
 
 Top
p2p
Отправлено: 19 Февраля, 2019 - 22:26:29
Post Id



Новичок


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


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




хех спасибо за подсказку.
но сделал задав еще две переменные:


и
PHP:
скопировать код в буфер обмена
  1.         $this->d[$this->ix][$this->iy]=$x;
  2.         $this->iy++;
  3.  
 
 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