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
Форумы портала PHP.SU :: Версия для печати :: Трехмерный массив
Форумы портала PHP.SU » » Вопросы новичков » Трехмерный массив

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

1. kilogram - 07 Апреля, 2012 - 22:18:25 - перейти к сообщению
Попробовал вывести массив:

PHP:
скопировать код в буфер обмена
  1. for ($i=0,$x=0; $x<16; $x++) {
  2.   for ($y=0; $y<16; $y++) {
  3.     $chars[$x][$y] = array($i, chr($i));
  4.     $i++;
  5.   }
  6. }
  7.  
  8.  
  9. for ($i = 0; $i < count($chars); $i++)
  10.    for ($j = 0; $j < count($chars[$i]); $j++)
  11.       for ($k = 0; $k < count($chars[$i][$j]); $k++)
  12.           echo $chars[$i][$j][$k].' ';
  13.  
  14.  

Вроде вывел. Интересует вопрос. Почему во втором внутреннем форе нужно писать $chars[$i], а в третем форе $chars[$i][$j] ?
2. Bio man - 07 Апреля, 2012 - 22:20:26 - перейти к сообщению
изучи структуру массивы и подумай почему так.
3. kilogram - 07 Апреля, 2012 - 22:33:26 - перейти к сообщению
Изучил, вижу что здесь такое:
PHP:
скопировать код в буфер обмена
  1.  
  2. array(16) {
  3.   [0]=>
  4.   array(16) {
  5.     [0]=>
  6.     array(2) {
  7.       [0]=>
  8.       int(0)
  9.       [1]=>
  10.       string(1) ""
  11. ..........
  12. }
  13.  

Здесь трехмерній массив, не понятно как пробегает фор.
Почему там с i во втором форе, а в третем форе с i + j?
4. OrmaJever - 07 Апреля, 2012 - 22:37:00 - перейти к сообщению
ну потому что во втором форе считает вложеный масив, а доступ к нему только по ключу.
5. kilogram - 07 Апреля, 2012 - 22:41:37 - перейти к сообщению
В каком смысле по ключу ко второму фору? А к третему тоже по ключу?
6. OrmaJever - 07 Апреля, 2012 - 22:49:03 - перейти к сообщению
kilogram попробуйте посмотреть результаты без цыкла.
PHP:
скопировать код в буфер обмена
  1. echo count($chars), '<br>';
  2. echo count($chars[0]), '<br>';
  3. echo count($chars[0][0]);
  4. print_r($chars);
7. kilogram - 07 Апреля, 2012 - 22:53:12 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. 16
  2. 16
  3. 2
  4. (
  5.     [0] => Array
  6.         (
  7.             [0] => Array
  8.                 (
  9.                     [0] => 0
  10.                     [1] =>
  11.                 )
  12.  
  13.             [1] => Array
  14.                 (
  15.                     [0] => 1
  16.                     [1] => 
  17.                 )
  18.  
  19.             [2] => Array
  20.                 (
  21.                     [0] => 2
  22.                     [1] => 
  23.                 )

(Добавление)
Это вроде ясно, не понятно почему вот эти скобки дописывать нужно во втором и третем форе. Понятно, чтоб пробраться во внутренний массив, не могу понять почему эти скобки добавлять с [$i] и в третем цикле [$i][$j]
8. OrmaJever - 07 Апреля, 2012 - 23:19:26 - перейти к сообщению
ну потому что квадратные скобки это доступ к масиву. Для того что бы получить значение этого масива пишется его ключ. $chars - масив, ключи перебирает цыкл, $chars[$i] снова масив который доступ к которому осуществляется по ключу и т.д.
9. kilogram - 07 Апреля, 2012 - 23:30:13 - перейти к сообщению
Цитата:
Для того что бы получить значение этого масива пишется его ключ.

Другими словами пишется переменная счетчика в квадратных скобках и чем больше многомерный массив тем больше квадратных скобок с разн. назв. переменных счетчика?
10. OrmaJever - 07 Апреля, 2012 - 23:34:07 - перейти к сообщению
Ну да, я даже не знаю как обьяснить потому что таких вопросов не задают. Люди обычно это сами понимают.
11. kilogram - 08 Апреля, 2012 - 00:19:03 - перейти к сообщению
Пишутся квадратные скобки во втором, третем форе и дальше - это означает что мы получаем доступ к вложенному массиву через его счетчик?
12. Panoptik - 08 Апреля, 2012 - 00:31:45 - перейти к сообщению
разберите простой пример
PHP:
скопировать код в буфер обмена
  1.  
  2. $arr = array(); // создаем пустой массив $arr
  3. $arr[] = 1; //добавляем новый элемент к массиву, теперь в массиве будет элемент с индексом 0 и значение его будет 1 то есть $arr[0] == 1
  4. //эту же операцию можно осуществить другим способом
  5. $arr[0] = 1;
  6. //или
  7. $arr = array(0 => 1);
  8. //всё это были операции с одномерным массивом. но теперь если мы присвоим следующему значению уже существующего массива еще один массив. то получим двухмерный массив
  9. //делаем двухмерный массив
  10. $arr[] = array(0 => 1);
  11. //теперь у нашего массива $arr имеется 2 элемента 2-ой из которых массив, то есть
  12. //$arr[0] == 1
  13. //$arr[1] == array(0 => 1)
  14. //$arr[1][0] == 1
  15.  

может это вас подведет к пониманию массива
13. kilogram - 08 Апреля, 2012 - 16:55:02 - перейти к сообщению
Доступ к внутреннему массиву в циклве фор, мы полчаем через индекс массива?
14. snikers987 - 08 Апреля, 2012 - 17:19:37 - перейти к сообщению
kilogram в любом случаи доступ к элементу массива осуществляется по ключу.
15. guitarain - 07 Января, 2014 - 10:10:10 - перейти к сообщению
Помогите, пожалуйста.
Есть таблица users, откуда извлекается class_id и id
Есть таблица homework, где каждая колонка-задание для класса.
В каждой колонке есть поле read_ids, где хранится id прочитавших задание(1,2,345,27345...).
Как проверить,прочитал пользователь с определённым id задание?
Заранее спасибо

 

Powered by ExBB FM 1.0 RC1