Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Muhammad97
10 / 10 / 2
Регистрация: 10.11.2013
Сообщений: 238
1

Как обрезать двумерный массив

07.06.2014, 15:21. Просмотров 676. Ответов 8
Метки нет (Все метки)

Есть массив с матрицей символа:

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
39
11111111111111111100000000
11111111111111111111000000
11111111111111111111100000
11110000000000111111110000
11100000000000001111111000
11100000000000000111111000
11100000000000000011111000
11100000000000000011111000
11100000000000000011111100
11100000000000000011111100
11100000000000000011111000
11100000000000000011111000
11100000000000000111111000
11100000000000000111110000
11100000000000011111100000
11111111111111111111000000
11111111111111111110000000
11111111111111111111100000
11111111111111111111111000
11110000000000001111111100
11100000000000000011111110
11100000000000000001111110
11100000000000000000111111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000111111
11100000000000000000111110
11100000000000000001111110
11100000000000000111111100
11111111111111111111111000
11111111111111111111110000
11111111111111111111100000
11111111111111111100000000
00000000000000000000000000
00000000000000000000000000
Нужно обрезать массив сверху и снизу, то есть срезать строки со всеми нулями. Пытался реализовать так:

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
function cutsymbol($sarray, $sarrayheight)
{
   $strlength = count($sarray[1]);
   $emptystr = createstr('0', $strlength);
 
   $top = 1;
   
 for($y = 1; $y<=$sarrayheight; $y++)
    {                        
      $str=implode('', $sarray[$y]);
      if ($str==$emptystr)
      {
      $top = $y;
      }
      else break;
    }
 
 
   $bottom=$sarrayheight;
   
 for($y = $sarrayheight; $y >= 1; $y--)
    {                        
      $str=implode('', $sarray[$y]);
      if ($str==$emptystr)
      {
      $bottom = $y;
      }
      else break;
    }
    
    $arrayheight=$bottom-$top;
   
  $dest=copyarray($sarray, 1, 1, $strlength, $arrayheight);
  
  return $dest;
  
}
Но выходит следующее:

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
1111111111111111111100000
1110000000000111111110000
1100000000000001111111000
1100000000000000111111000
1100000000000000011111000
1100000000000000011111000
1100000000000000011111100
1100000000000000011111100
1100000000000000011111000
1100000000000000011111000
1100000000000000111111000
1100000000000000111110000
1100000000000011111100000
1111111111111111111000000
1111111111111111110000000
1111111111111111111100000
1111111111111111111111000
1110000000000001111111100
1100000000000000011111110
1100000000000000001111110
1100000000000000000111111
1100000000000000000011111
1100000000000000000011111
1100000000000000000011111
1100000000000000000011111
1100000000000000000011111
1100000000000000000011111
1100000000000000000111111
1100000000000000000111110
1100000000000000001111110
1100000000000000111111100
1111111111111111111111000
1111111111111111111110000
1111111111111111111100000
1111111111111111100000000
0000000000000000000000000
0000000000000000000000000
Добавлено через 2 минуты
coppyarray копирует двумерный массив в другой с параметрами $top, $left, $width, $height
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2014, 15:21
Ответы с готовыми решениями:

Как обрезать массив по бокам
Здравствуйте. У меня такая проблема... Дан ассоциативный массив из n элементов...

Есть надобность обрезать массив от начала и до n
Добрый день Есть надобность обрезать массив от начала и до n. суть...

Как отсортировать двумерный массив?
Как отсортировать двумерный массив по полю $data_array_1? Сортировка по...

Как узнать, массив одномерный или двумерный?
Есть ли простая функция? Если нет - то как это сделать на циклах?

Как создать и заполнить двумерный массив, в строках которого числа, а в столбцах - текст?
Скажите, пожалуйста, как создать и заполнить двумерный массив ,в строках...

8
pav1uxa
1857 / 1711 / 802
Регистрация: 23.01.2014
Сообщений: 6,082
Завершенные тесты: 1
07.06.2014, 15:30 2
Цитата Сообщение от Muhammad97 Посмотреть сообщение
Нужно обрезать массив сверху и снизу, то есть срезать строки со всеми нулями. Пытался реализовать так:
Но сверху нет "строки со всеми нулями"?
0
Muhammad97
10 / 10 / 2
Регистрация: 10.11.2013
Сообщений: 238
07.06.2014, 15:34  [ТС] 3
У некоторых символов нет, у некоторых есть, это просто один из примеров

Добавлено через 2 минуты
Мне подойдет код обрезки снизу, думаю сделать то же самое для верха не составит труда
0
pav1uxa
1857 / 1711 / 802
Регистрация: 23.01.2014
Сообщений: 6,082
Завершенные тесты: 1
07.06.2014, 15:34 4
Цитата Сообщение от Muhammad97 Посмотреть сообщение
У некоторых символов нет, у некоторых есть, это просто один из примеров
А строки со всеми нулями обязательно снизу или сверху? Или могут быть в середине тоже? И что делать если найдутся в середине, тоже срезать?
0
Muhammad97
10 / 10 / 2
Регистрация: 10.11.2013
Сообщений: 238
07.06.2014, 15:36  [ТС] 5
Нет, в середине точно не будет, нужно только снизу и сверху
0
pav1uxa
1857 / 1711 / 802
Регистрация: 23.01.2014
Сообщений: 6,082
Завершенные тесты: 1
07.06.2014, 15:39 6
Лучший ответ Сообщение было отмечено Muhammad97 как решение

Решение

Muhammad97, Ну например так. Если нужно чтобы это обязательно массив был, а не строка, то это легко попровить...
php-code
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
39
40
41
42
43
44
45
46
47
48
49
50
<?
$string = <<<S
00000000000000000000000000
11111111111111111100000000
11111111111111111111000000
11111111111111111111100000
11110000000000111111110000
11100000000000001111111000
11100000000000000111111000
11100000000000000011111000
11100000000000000011111000
11100000000000000011111100
11100000000000000011111100
11100000000000000011111000
11100000000000000011111000
11100000000000000111111000
11100000000000000111110000
11100000000000011111100000
11111111111111111111000000
11111111111111111110000000
11111111111111111111100000
11111111111111111111111000
11110000000000001111111100
11100000000000000011111110
11100000000000000001111110
11100000000000000000111111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000111111
11100000000000000000111110
11100000000000000001111110
11100000000000000111111100
11111111111111111111111000
11111111111111111111110000
11111111111111111111100000
11111111111111111100000000
00000000000000000000000000
00000000000000000000000000
S;
echo "<pre>Before:\n$string";
$strings = preg_split("/\n/", $string);
$newstring = "";
foreach ($strings as $v)
    if (!preg_match("/^0{26}$/", $v))
        $newstring .= $v."\n";
echo "\nAfter:\n$newstring";

Result
Код
Before:
00000000000000000000000000
11111111111111111100000000
11111111111111111111000000
11111111111111111111100000
11110000000000111111110000
11100000000000001111111000
11100000000000000111111000
11100000000000000011111000
11100000000000000011111000
11100000000000000011111100
11100000000000000011111100
11100000000000000011111000
11100000000000000011111000
11100000000000000111111000
11100000000000000111110000
11100000000000011111100000
11111111111111111111000000
11111111111111111110000000
11111111111111111111100000
11111111111111111111111000
11110000000000001111111100
11100000000000000011111110
11100000000000000001111110
11100000000000000000111111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000111111
11100000000000000000111110
11100000000000000001111110
11100000000000000111111100
11111111111111111111111000
11111111111111111111110000
11111111111111111111100000
11111111111111111100000000
00000000000000000000000000
00000000000000000000000000
After:
11111111111111111100000000
11111111111111111111000000
11111111111111111111100000
11110000000000111111110000
11100000000000001111111000
11100000000000000111111000
11100000000000000011111000
11100000000000000011111000
11100000000000000011111100
11100000000000000011111100
11100000000000000011111000
11100000000000000011111000
11100000000000000111111000
11100000000000000111110000
11100000000000011111100000
11111111111111111111000000
11111111111111111110000000
11111111111111111111100000
11111111111111111111111000
11110000000000001111111100
11100000000000000011111110
11100000000000000001111110
11100000000000000000111111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000011111
11100000000000000000111111
11100000000000000000111110
11100000000000000001111110
11100000000000000111111100
11111111111111111111111000
11111111111111111111110000
11111111111111111111100000
11111111111111111100000000
1
Muhammad97
10 / 10 / 2
Регистрация: 10.11.2013
Сообщений: 238
07.06.2014, 15:49  [ТС] 7
Будет ли она корректно обрезать массив, если сверху или снизу нет нулей?
0
pav1uxa
1857 / 1711 / 802
Регистрация: 23.01.2014
Сообщений: 6,082
Завершенные тесты: 1
07.06.2014, 15:57 8
Цитата Сообщение от Muhammad97 Посмотреть сообщение
Будет ли она корректно обрезать массив, если сверху или снизу нет нулей?
Зачем спрашивать, не легче проверить? Прямо в моем примере достаточно легко удалить все нули сверху или снизу

p.s. скрипт проверяет ВСЕ строки массива. И записывает только те, которые НЕ состоят из 26 нулей подряд.
0
Muhammad97
10 / 10 / 2
Регистрация: 10.11.2013
Сообщений: 238
07.06.2014, 16:18  [ТС] 9
Тоже самое, только не на регулярках и обрезает массив, а не строку:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function cutsymbol($sarray, $sarrayheight)
{
   $strlength = count($sarray[1]);
   $emptystr = createstr('0', $strlength);
 
   $i=1;
   
 for($y = 0; $y<=$sarrayheight; $y++)
    {                        
      $str=implode('', $sarray[$y]);
      if ($str<>$emptystr)
      {
        $dest[$i]=$sarray[$y];
        $i++;
      }
      else break;
    }
  
  return $dest;
  
}
0
07.06.2014, 16:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2014, 16:18

Как обрезать строку
Есть две строки \r\n &lt;div class=&quot;ra-elements-list__pay&quot;&gt;\r\n \t\t\t от 35 000...

Как у остатка обрезать хвостик
Добрый день! Пишу свой первый калькулятор. Считает по формуле , ответ выдает...

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


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

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

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