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]   

> Описание: Ассоциативный многоуровненвый массив.
danemon
Отправлено: 19 Мая, 2014 - 00:51:54
Post Id


Новичок


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


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




Пока писал этот пост, проблему уже решил, но почему она вообще возникла - не понял. Может разъясните?

Делаю меню для сайта.
Идея такова: в массив записываю названия пунктов меню первого уровня, и внутрь вкладываю еще один массив с ключами и названиями вложенных пунктов меню.
Вот код:
PHP:
скопировать код в буфер обмена
  1. $menu['main_about']=array(
  2.              'title' => 'О школе',
  3.              'contents' => array(
  4.                        'mission'      => "Миссия, цели и задачи",
  5.                        'grafik'       => 'Администрация',
  6.                        'develop'      => 'Приоритетные направления',
  7.                        'collective'   => 'Педагогический коллектив',
  8.                        'sps'          => 'Социально-психологичесая служба',
  9.                        'children'     => 'Ученический коллектив',
  10.                        'how_to_enter' => 'Условия приема',
  11.                        'documents'    => 'Важные документы',
  12.                        'i'            => 'Информатизация',
  13.                        'mtb'          => 'Материально-техническая база',
  14.                        's'            => 'Сотрудничество',
  15.                        'm'            => 'Медиатека',
  16.                        'library'      => 'Библиотека')
  17.                        );  
  18.  
  19. echo "имеющиеся меню:<br>";
  20. foreach($menu['main_about']['contents'] as $key => $value)
  21.         {
  22.                 echo "$key = ".$value['title']."<br>";
  23.         }


Здесь ошибка была - в 22-й строке я написал $value['title'] вместо $value.

В результате работы скрипта с ошибкой, он выдает вот это:
CODE (htmlphp):
скопировать код в буфер обмена
  1. имеющиеся меню:
  2. mission = М
  3. grafik = А
  4. develop = П
  5. collective = П
  6. sps = С
  7. children = У
  8. how_to_enter = У
  9. documents = В
  10. i = И
  11. mtb = М
  12. s = С
  13. m = М
  14. library = Б

Почему от строк остались только первые буквы? Почему они вообще отображаются?
 
 Top
IllusionMH
Отправлено: 19 Мая, 2014 - 02:13:46
Post Id



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


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


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




danemon, вангую: скорее всего пых версии 5.3.x (или того хуже 5.2.х)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $str = '12345';
  3. echo $str['string key that will be converted to int'];
  4. var_dump((int) 'string key that will be converted to int');

запустите этот код.

"ну а с 5.4+" (Отобразить)
 
 Top
Мелкий Супермодератор
Отправлено: 19 Мая, 2014 - 09:36:47
Post Id



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


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


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




danemon пишет:
в 22-й строке я написал $value['title'] вместо $value.

Ну так зря написали. У вас $value не массив.


-----
PostgreSQL DBA
 
 Top
danemon
Отправлено: 19 Мая, 2014 - 21:42:31
Post Id


Новичок


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


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




Спасибо за ответы.

Код возвращает результат:
1int(0)
Полагаю, ты хочешь сказать, что глюк с первыми символами строковых значений массива - из-за версии PHP.
PHP у меня версии 5.2.17 (установлен на IIS, WinXP) - не критично в общем для меня. Используется только для разработки, на хостинге будет уже 5.4 версия.

А про "зря написал" - весьма согласен ))) Долго понять не мог, увлекся просто. Бывает Закатив глазки
Аналогичная проблема произошла после исправления этой ошибки. Когда все заработало (то есть генерация ссылок меню корректно заработала), то долго не мог понять почему меню не отображается нормально. Оказалось что вместо <UL id='бла-бла-бла'> написал <UL class='бла-бла-бла'>. Спустя часа 4-5 смог найти проблему Ха-ха
 
 Top
IllusionMH
Отправлено: 19 Мая, 2014 - 21:54:05
Post Id



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


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


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




danemon, т.е. текст который использовался в строковом индексе совсем не намекает на ответ? или результат его приведения? Или текст ошибки который появится на 5.4? Вообще не намекают на то что происходит? Это не глюк.
На хостинге тоже будет iis + php? в чем смысл если гораздо лучше поставить сборку с 5.4 и сразу узнать какие же ошибки повылазят на хостинге. В конкретном случае - это будет критично.
 
 Top
danemon
Отправлено: 21 Мая, 2014 - 01:08:43
Post Id


Новичок


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


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




IllusionMH пишет:
danemon, т.е. текст который использовался в строковом индексе совсем не намекает на ответ? или результат его приведения? Или текст ошибки который появится на 5.4? Вообще не намекают на то что происходит? Это не глюк.
На хостинге тоже будет iis + php? в чем смысл если гораздо лучше поставить сборку с 5.4 и сразу узнать какие же ошибки повылазят на хостинге. В конкретном случае - это будет критично.


Я просто второпях забыл убрать лишнюю приписку после имени массива в своем коде, это создало проблему. Поэтому решил обратиться к специалистам. Проблему потом решил ведь!

Про строку в индексе - спасибо, я заметил. И раз это НЕ глюк - пусть это будет НЕ глюком (хотя по большому счету мне все равно). Мне в общем-то это и нужно было узнать - почему скрипт отработал именно так, а не иначе.

Связка IIS+PHP нужна мне на моем личном нетбуке по другим причинам, ни каким боком сюда не относящимся, эта связка у меня стоит и используется в учебных целях и совершенно устраивает. Почему бы мне не работать в том что есть чтобы писать простые сайты?
На хостинге будет апач и PHP 5,4 и для меня совершенно не важно (по крайней мере пока) - апач там или еще что-то.
Различия версий PHP пока только в достаточно тонких материях, до которых я пока не дошел, и вряд ли дойду в рамках того сайта, который я сейчас пишу. Стараюсь избегать ляпов изначально, но не всегда удается - сами видите)))). Так что спасибо за предложение - я оставлю все как есть, а то будет как в анекдоте:
сын подходит к отцу (айтишнику) и спрашивает - Пап, почему солнце восходит утром, а заходит вечером?
Отец: - всегда?
Сын: - ну да...
Отец: - и зимой, и летом? и вообще всегда-всегда?
Сын: - ... пап, ты чего? конечно всегда. Просто - почему?
Отец: - тогда сынок, я тебя умоляю, раз так всегда происходит, и без сбоев - ни в коем случае не лезь туда и не меняй настройки!!

(Отредактировано автором: 21 Мая, 2014 - 01:12:36)

 
 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