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. Axl - 19 Апреля, 2014 - 23:57:37 - перейти к сообщению
Всем привет.
Проблема: есть двухмерный ассоциативный массив вида примерно такого:
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!
2. Строитель - 20 Апреля, 2014 - 00:24:38 - перейти к сообщению
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.  
3. Axl - 20 Апреля, 2014 - 08:12:16 - перейти к сообщению
Строитель пишет:

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

Нужно всё, но вот в таком виде и с добавленным условием:
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];

Если строка будет на латинице, то всё ок, но кириллицу таким образом никак выводить не хочет. Над причиной бьюсь уже второй день.
4. Строитель - 20 Апреля, 2014 - 11:40:06 - перейти к сообщению
Усли не ошибаюсь - условие не сработает
Axl пишет:
if ($value[0] == "м")

строки "м" нет в массиве.
5. Axl - 20 Апреля, 2014 - 15:24:53 - перейти к сообщению
Строитель пишет:
Усли не ошибаюсь - условие не сработает
строки "м" нет в массиве.

Я обращаюсь к каждой строке значений внутренних массивов как к массиву, так ведь можно. Уже делал так раньше с латиницей - всё работает как надо, а на кириллице выводит кракозябры.
6. Мелкий - 20 Апреля, 2014 - 19:58:42 - перейти к сообщению
Axl пишет:
Header с utf-8 посылал, в php.ini utf-8 прописывал

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

 

Powered by ExBB FM 1.0 RC1