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. danemon - 19 Мая, 2014 - 00:51:54 - перейти к сообщению
Пока писал этот пост, проблему уже решил, но почему она вообще возникла - не понял. Может разъясните?

Делаю меню для сайта.
Идея такова: в массив записываю названия пунктов меню первого уровня, и внутрь вкладываю еще один массив с ключами и названиями вложенных пунктов меню.
Вот код:
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 = Б

Почему от строк остались только первые буквы? Почему они вообще отображаются?
2. IllusionMH - 19 Мая, 2014 - 02:13:46 - перейти к сообщению
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+" (Отобразить)
3. Мелкий - 19 Мая, 2014 - 09:36:47 - перейти к сообщению
danemon пишет:
в 22-й строке я написал $value['title'] вместо $value.

Ну так зря написали. У вас $value не массив.
4. danemon - 19 Мая, 2014 - 21:42:31 - перейти к сообщению
Спасибо за ответы.

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

А про "зря написал" - весьма согласен ))) Долго понять не мог, увлекся просто. Бывает Закатив глазки
Аналогичная проблема произошла после исправления этой ошибки. Когда все заработало (то есть генерация ссылок меню корректно заработала), то долго не мог понять почему меню не отображается нормально. Оказалось что вместо <UL id='бла-бла-бла'> написал <UL class='бла-бла-бла'>. Спустя часа 4-5 смог найти проблему Ха-ха
5. IllusionMH - 19 Мая, 2014 - 21:54:05 - перейти к сообщению
danemon, т.е. текст который использовался в строковом индексе совсем не намекает на ответ? или результат его приведения? Или текст ошибки который появится на 5.4? Вообще не намекают на то что происходит? Это не глюк.
На хостинге тоже будет iis + php? в чем смысл если гораздо лучше поставить сборку с 5.4 и сразу узнать какие же ошибки повылазят на хостинге. В конкретном случае - это будет критично.
6. danemon - 21 Мая, 2014 - 01:08:43 - перейти к сообщению
IllusionMH пишет:
danemon, т.е. текст который использовался в строковом индексе совсем не намекает на ответ? или результат его приведения? Или текст ошибки который появится на 5.4? Вообще не намекают на то что происходит? Это не глюк.
На хостинге тоже будет iis + php? в чем смысл если гораздо лучше поставить сборку с 5.4 и сразу узнать какие же ошибки повылазят на хостинге. В конкретном случае - это будет критично.


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

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

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

 

Powered by ExBB FM 1.0 RC1