Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Mykola Balanov
0 / 0 / 0
Регистрация: 08.05.2013
Сообщений: 94
#1

Непонятная ситуация с многомерным массивом

12.08.2013, 03:57. Просмотров 459. Ответов 10
Метки нет (Все метки)

Код довольно таки простой:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$str = 'Я {самый|очень} хороший {программист|programmer|юзер} и {программист|хорерограф}. Танцевал на сцене {Киевского оперного театра|Дворца культуры Украина} и на арене {Республиканского стадиона (город Киев)|Стадиона "Лужники(город Москва)}'; 
  // на випадок, коли юзер забуде ввести дані
  preg_match_all('/\{([^{}]*?)\}/', $str, $found);  //розбиває введенний текст на слова-константі и слова-банери
                                                    // Я {самый|очень} хороший: Я - слово-константа; самый|очень - слова банери
  //$word =  array[][];
  for($i=0;$i<count($found[1]);++$i){
      echo "група слів-банерів №$i ".$found{1}[$i]."<br>";
      $t = explode("|", $found[0][$i]); 
      for($k=0; $k<count($t); $k++){
        $s = $t[$k];
        $len = strlen($s);
        if($k==0){
            echo "&nbsp; &nbsp;".$len."<br>";
            $word[$i][$k]=substr($t[$k], 1, $len-1);
        } 
        if($k==$len){
            $word[$i][$k]=substr($t[$k], 0, $len-1);
        }
        
        echo "word[$i][$k]=".$t[$k]."<br>";
      }    
  }
  echo "<hr><b><i>";
  echo $word[0][0]."<br>";
  echo $word[0][1]."<br>";
  echo $word[0][2]."<br>";
  echo $word[1][0]."<br>";
  echo $word[1][1]."<br>";
  echo $word[1][2]."<br>";
  echo $word[2][0]."<br>";
  echo $word[2][1]."<br>";
  echo $word[2][2]."<br>";
  echo $word[3][0]."<br>";
  echo $word[3][1]."<br>";
  echo $word[3][2]."<br>";
  echo $word[4][0]."<br>";
  echo $word[4][1]."<br>";
  echo $word[4][2]."<br>";
Но этот код возвращает:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
група слів-банерів №0 самый|очень
   6
word[0][0]={самый
word[0][1]=очень}
група слів-банерів №1 программист|programmer|юзер
   12
word[1][0]={программист
word[1][1]=programmer
word[1][2]=юзер}
група слів-банерів №2 программист|хорерограф
   12
word[2][0]={программист
word[2][1]=хорерограф}
група слів-банерів №3 Киевского оперного театра|Дворца культуры Украина
   26
word[3][0]={Киевского оперного театра
word[3][1]=Дворца культуры Украина}
група слів-банерів №4 Республиканского стадиона (город Киев)|Стадиона "Лужники(город Москва)
   39
word[4][0]={Республиканского стадиона (город Киев)
word[4][1]=Стадиона "Лужники(город Москва)}
самый
 
 
программист
 
 
программист
 
 
Киевского оперного театра
 
 
Республиканского стадиона (город Киев)
Почему в цикле происходите нормальное обращение к, скажем $word[0][1], а не в цикле echo $word[0][1]."<br>"; не возвращает ничего кроме перевода строки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2013, 03:57
Ответы с готовыми решениями:

Непонятная ситуация с обработкой формы (POST)
Здравствуйте. В общем, на страничке есть форма с полем input, отправка данных...

Работа с многомерным массивом
Здравствуйте. Имеется массив $arArray: =&gt; Array ( ...

Работа с многомерным массивом
Вопрос как foreach вывести конкретную часть многомерного массива. Т.е вот...

Манипуляция с многомерным массивом
Есть некий массив, в котором может быть несколько массивов с двумя элементами -...

Непонятка с многомерным массивом
есть массив $data который содержит данные полученные с БД, вот как он примерно...

10
LaPyX
40 / 40 / 6
Регистрация: 17.04.2013
Сообщений: 196
12.08.2013, 08:04 #2
Цитата Сообщение от Mykola Balanov Посмотреть сообщение
PHP
1
echo "word[$i][$k]=".$t[$k]."<br>";
вот почему, то что у вас садится в массив и то что у вас показывает echo в цикле разные вещи, у вас substr режет не правильно.
Цитата Сообщение от Mykola Balanov Посмотреть сообщение
PHP
1
$word[$i][$k]=substr($t[$k], 0, $len-1);
0
Mykola Balanov
0 / 0 / 0
Регистрация: 08.05.2013
Сообщений: 94
12.08.2013, 08:09  [ТС] #3
Цитата Сообщение от LaPyX Посмотреть сообщение
вот почему, то что у вас садится в массив и то что у вас показывает echo в цикле разные вещи, у вас substr режет не правильно.
А что неправильного в обрезке? Обрезать последний символ. Что здесь неправильного?
0
LaPyX
40 / 40 / 6
Регистрация: 17.04.2013
Сообщений: 196
12.08.2013, 08:39 #4
я не знаю что у вас неправильно в обрезке, но вы пытаетесь сравнить разные вещи
0
Mykola Balanov
0 / 0 / 0
Регистрация: 08.05.2013
Сообщений: 94
12.08.2013, 08:52  [ТС] #5
Я не пытаюсь сравнить! Я говорю что на выходе получаю НЕ ВСЕ данные. В данном случае на выходе должно быть:
самый
очень
программист
programmer
юзер
программист
хорерограф
Киевского оперного театра
Дворца культуры Украина
Республиканского стадиона (город Киев)
Стадиона "Лужники(город Москва)

А мой код выдает (только первые слова из каждой группы):
самый


программист


программист


Киевского оперного театра


Республиканского стадиона (город Киев)
Вот я и спрашиваю где и что я делаю неправильно?
0
LaPyX
40 / 40 / 6
Регистрация: 17.04.2013
Сообщений: 196
12.08.2013, 08:59 #6
для кириллицы надо эту функцию использовать
PHP
1
2
$len = mb_strlen($s)
$word[$i][$k]=mb_substr($t[$k], 0, $len-1);
0
Mykola Balanov
0 / 0 / 0
Регистрация: 08.05.2013
Сообщений: 94
12.08.2013, 09:28  [ТС] #7
Цитата Сообщение от LaPyX Посмотреть сообщение
для кириллицы надо эту функцию использовать
PHP
1
2
$len = mb_strlen($s)
$word[$i][$k]=mb_substr($t[$k], 0, $len-1);
Сейчас заменю функцию. Но от этого "пропавшие" слова не появятся!

Добавлено через 3 минуты
Функцию заменил; "пропавшие" слова (эдементы массива) - не "появились"!
0
LaPyX
40 / 40 / 6
Регистрация: 17.04.2013
Сообщений: 196
12.08.2013, 09:55 #8
ваш код обрезки можно проще написать
PHP
1
2
3
4
5
6
7
 if($k==0){
            echo "&nbsp; &nbsp;".$len."<br>";
            $word[$i][$k]=mb_substr($t[$k], 1);
        } 
        if($k==$len){
            $word[$i][$k]=mb_substr($t[$k], 0, -1);
        }
Добавлено через 2 минуты
а с чего вы взяли что у вас if($k==$len) - вот это условие будет срабатывать?))

Добавлено через 36 секунд
вот так должно быть
PHP
1
2
3
4
5
6
7
        if($k==0){
            echo "&nbsp; &nbsp;".$len."<br>";
            $word[$i][$k]=mb_substr($t[$k], 1);
        } 
        else{
            $word[$i][$k]=mb_substr($t[$k], 0, -1);
        }
0
Mykola Balanov
0 / 0 / 0
Регистрация: 08.05.2013
Сообщений: 94
12.08.2013, 13:06  [ТС] #9
Не понял, перед этим вы советовали использовать mb_substr, а теперь обратно на substr?
Но в конце-концов от этого не зависит будут ли заполнены только первые элементы групп слов!

Добавлено через 1 минуту
Сейчас попробую и этот вариант.
странно, не понимаю почему но этот вариант РАБОТАЕТ ПРАВИЛЬНО!
БОЛЬШОЕ спасибо!!!

Добавлено через 3 часа 8 минут
Все хорошо но код :
PHP
1
2
3
4
5
6
7
8
9
10
      for($k=0; $k<count($t); $k++){
        $s = $t[$k];
        $len = mb_strlen($s);
        if($k==0){
            echo "&nbsp; &nbsp;".$len."<br>";
            $word[$i][$k]=$t[$k]=mb_substr($t[$k], 1, $len-1);
        }else{
            $word[$i][$k]=$t[$k]=mb_substr($t[$k], 0, $len-1);
        }
      }
У средних слов (не первыхэ и не последних - вырезает последний символ. Уже по всякому пробывал, что-то не получается учесть условие "среднего" символа
0
LaPyX
40 / 40 / 6
Регистрация: 17.04.2013
Сообщений: 196
12.08.2013, 13:21 #10
Mykola Balanov, ну дык вы же сами такое условие придумали, я всего лишь исправил ошибку. Но что бы он не резал символы у средних слов можно сделать так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
for($k=0; $k<count($t); $k++){
        $s = $t[$k];
        $len = mb_strlen($s);
        if($k==0){
            echo "&nbsp; &nbsp;".$len."<br>";
            $word[$i][$k]=$t[$k]=mb_substr($t[$k], 1);
        } else if( mb_substr( $t[$k], -1) == '}' ){
            $word[$i][$k]=$t[$k]=mb_substr($t[$k], 0, -1);
        } else {
            $word[$i][$k]=$t[$k];
        }
      }
1
Mykola Balanov
0 / 0 / 0
Регистрация: 08.05.2013
Сообщений: 94
12.08.2013, 15:24  [ТС] #11
Попробую так посже...
Но вам еще раз спасибо!
0
12.08.2013, 15:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2013, 15:24

Работа с многомерным массивом
здравствуйте , мне нужно отпарсить массив так чтобы я имел доступ к значениям ...

Работа с текстовым файлом и многомерным массивом
Имеем файл 'rubrics.txt', содержимое которого фиксировано и выглядит следущим...

var_dump() типы данных, непонятная ситуация
В кратце, есть дата которую я парсил с одного сайта, и дата напечатанная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru