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]   

> Без описания
Axl
Отправлено: 19 Апреля, 2014 - 23:57:37
Post Id


Новичок


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


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




Всем привет.
Проблема: есть двухмерный ассоциативный массив вида примерно такого:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $arr = array (
  3.   "а" => array("абв","где","ёжз"),
  4.   "б" => array("икл","мно","прс"),
  5.   "в" => array("туф","хцч","шщэ")
  6. );
  7.  
  8. foreach ($arr as $values){
  9.   foreach ($values as $value){
  10.     echo $value[0];
  11.   }
  12. }
  13.  

При попытке вывести первые элементы строк значений внутренних массивов получаю на странице, в зависимости от браузера, пустые квадраты или чёрные ромбы со знаком вопроса вместо русскоязычных символов. При выводе var_dump'ом в массивах всё равно видны квадраты. Если выводить первые элементы значений наружного массива, то "абвиклтуф" выведется нормально. Header с utf-8 посылал, в php.ini utf-8 прописывал, тестировал на разных Open Server'ax и XAMPP'e, прогуглил всё, что можно - без толку. Help!

(Отредактировано автором: 19 Апреля, 2014 - 23:58:11)

 
 Top
Строитель
Отправлено: 20 Апреля, 2014 - 00:24:38
Post Id



Участник


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


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




Axl пишет:
Всем привет.
Проблема: есть двухмерный ассоциативный массив вида примерно такого:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $arr = array (
  3.   "а" => array("абв","где","ёжз"),
  4.   "б" => array("икл","мно","прс"),
  5.   "в" => array("туф","хцч","шщэ")
  6. );
  7.  
  8. foreach ($arr as $values){
  9.   foreach ($values as $value){
  10.     echo $value[0];
  11.   }
  12. }
  13.  

При попытке вывести первые элементы строк значений внутренних массивов получаю на странице, в зависимости от браузера, пустые квадраты или чёрные ромбы со знаком вопроса вместо русскоязычных символов. При выводе var_dump'ом в массивах всё равно видны квадраты. Если выводить первые элементы значений наружного массива, то "абвиклтуф" выведется нормально. Header с utf-8 посылал, в php.ini utf-8 прописывал, тестировал на разных Open Server'ax и XAMPP'e, прогуглил всё, что можно - без толку. Help!



А нужно именно сразу всё содержимое массива выводить? Я бы другим циклом прошёл по массиву.Например:

PHP:
скопировать код в буфер обмена
  1. $arr=array('а'=>array('абв','где','ёжз'),
  2.            'б'=>array('икл','мно','прс'),
  3.            'в'=>array('туф','хцч','шщэ'));
  4. $all=sizeof($arr);
  5. for($i=0; $i<$all; $i++){
  6.     $str_0.=$arr['а'][$i].'<br />';
  7.     $str_1.=$arr['б'][$i].'<br />';
  8.     $str_2.=$arr['в'][$i].'<br />';
  9. }
  10. echo $val=$str_0.$str_1.$str_2;
  11.  
 
 Top
Axl
Отправлено: 20 Апреля, 2014 - 08:12:16
Post Id


Новичок


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


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




Строитель пишет:

А нужно именно сразу всё содержимое массива выводить? Я бы другим циклом прошёл по массиву.Например:

Нужно всё, но вот в таком виде и с добавленным условием:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. foreach ($arr as $values){
  3.   // вывод ключей наружного массива
  4.   foreach ($values as $value){
  5.     if ($value[0] == "м")
  6.       echo $value . ' ';
  7.   }
  8. }
  9.  

В итоге в браузере выглядеть всё должно примерно так:
а:
б: мно
в:

Проблема в том, что не могу обратиться к строке как к массиву, и условие не срабатывает. Простейший случай, выведется пустой квадрат вместо символа:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $str = 'Строка';
  2. echo $str[0];

Если строка будет на латинице, то всё ок, но кириллицу таким образом никак выводить не хочет. Над причиной бьюсь уже второй день.

(Отредактировано автором: 20 Апреля, 2014 - 08:13:49)

 
 Top
Строитель
Отправлено: 20 Апреля, 2014 - 11:40:06
Post Id



Участник


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


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




Усли не ошибаюсь - условие не сработает
Axl пишет:
if ($value[0] == "м")

строки "м" нет в массиве.
 
 Top
Axl
Отправлено: 20 Апреля, 2014 - 15:24:53
Post Id


Новичок


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


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




Строитель пишет:
Усли не ошибаюсь - условие не сработает
строки "м" нет в массиве.

Я обращаюсь к каждой строке значений внутренних массивов как к массиву, так ведь можно. Уже делал так раньше с латиницей - всё работает как надо, а на кириллице выводит кракозябры.
 
 Top
Мелкий Супермодератор
Отправлено: 20 Апреля, 2014 - 19:58:42
Post Id



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


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


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




Axl пишет:
Header с utf-8 посылал, в php.ini utf-8 прописывал

Кириллица в utf8 занимает два байта.
Обращение к строке как к массиву оперирует байтами.


-----
PostgreSQL DBA
 
 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