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]   

> Описание: не могу разобраться в цикле
span4ez
Отправлено: 07 Июля, 2013 - 17:32:07
Post Id



Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Нояб. 2010  
Откуда: Рязань, Россия


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




Здравствуйте всем. Возникла след проблема не могу понять где не правильно.

начальное значение - 123 456 231 546 231 312 4556

вот мой код

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $text = '123 456 231 546 231 312 4556';
  3. if($text != false){
  4. echo "Входная строка - ".$text; ?></br></br><?
  5. $array = explode(" ",$text);
  6.                
  7. for ($i = 0; $i < count($array); $i++) {
  8.        
  9. $arr[$i] = str_split($array[$i]);
  10.                
  11. }
  12.                
  13. for ($i = 0; $i < count($arr); $i++) {
  14.                
  15. for ($j = 0; $j < count($arr[$i]); $j++) {
  16.                        
  17. for ($x = 0; $x < count($arr); $x++) {
  18.                                
  19. for ($y = 0; $y < count($arr[$x]); $y++) {
  20. if ($arr[$i][$j] == $arr[$x][$y]){
  21.  
  22. if (count($arr[$i]) == count($arr[$x])){
  23.                                                                                                
  24. for($c = 0; $c < count($arr[$x]); $c++){
  25. $res = $res.$arr[$x][$c];                                                                                                               }
  26. $res = $res . ' ';
  27. }
  28. }else{
  29. break;
  30. }
  31. }
  32. }
  33. }
  34. print_r ($res);?><br><?
  35. $res = '';
  36. }
  37. }
  38.  
  39. ?>


у меня выводит вот так:

CODE (htmlphp):
скопировать код в буфер обмена
  1. 123 231 231 312
  2. 456 546
  3. 231 231 312 123
  4. 546 456
  5. 231 231 312 123
  6. 312 123 231 231
  7. 4556


а требуется вот так

CODE (htmlphp):
скопировать код в буфер обмена
  1. 123 231 231 312
  2. 456 546
  3. 4556


Подскажите где я мог обмануть себя?
Заранее спасибо.

(Отредактировано автором: 07 Июля, 2013 - 17:33:36)

 
 Top
EuGen Администратор
Отправлено: 07 Июля, 2013 - 17:41:03
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Что требуется сделать? Сформулируйте задачу, тогда будет понятнее.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
span4ez
Отправлено: 07 Июля, 2013 - 17:47:19
Post Id



Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Нояб. 2010  
Откуда: Рязань, Россия


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




В общем задача звучит так.

Во входном файле содержится строка длиной не более 255 символов, в которой через один пробел следуют слова. Найти все группы анаграмм в этой строке и вывести их каждую с новой строки, все слова должны идти через пробел в порядке, в котором они встречаються

Пример:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Входная строка: 123 456 231 546 231 312 4556
  3. Результат:
  4. 123 231 231 312
  5. 456 546
  6. 4556
  7.  


Отредактировано администратором: EuGen, 07 Июля, 2013 - 18:41:01
Подпись удалена, поскольку не соответствует правилам конференции
 
 Top
EuGen Администратор
Отправлено: 07 Июля, 2013 - 18:39:25
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Можно воспользоваться функцией array_split
PHP:
скопировать код в буфер обмена
  1. $sFile    = 'input.txt';
  2. $rgResult = array_split(preg_split('/\s+/', file_get_contents($sFile), -1, PREG_SPLIT_NO_EMPTY), function($sValue)
  3. {
  4.         return array_sum(array_map(function($cItem)
  5.         {
  6.                 return ord($cItem)*ord($cItem);
  7.         },str_split($sValue)));
  8. });
  9. foreach($rgResult as $rgAnagramms)
  10. {
  11.         echo(join(' ', $rgAnagramms).PHP_EOL);
  12. }


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
span4ez
Отправлено: 07 Июля, 2013 - 18:45:54
Post Id



Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Нояб. 2010  
Откуда: Рязань, Россия


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




EuGen пишет:
Можно воспользоваться функцией <a href='http://forum.php.su/topic.php?forum=35&topic=791'>array_split</a>
PHP:
скопировать код в буфер обмена
  1. $sFile    = 'input.txt';
  2. $rgResult = array_split(preg_split('/\s+/', file_get_contents($sFile), -1, PREG_SPLIT_NO_EMPTY), function($sValue)
  3. {
  4.         return array_sum(array_map(function($cItem)
  5.         {
  6.                 return ord($cItem)*ord($cItem);
  7.         },str_split($sValue)));
  8. });
  9. foreach($rgResult as $rgAnagramms)
  10. {
  11.         echo(join(' ', $rgAnagramms).PHP_EOL);
  12. }


Дает тот же результат Недовольство, огорчение
 
 Top
EuGen Администратор
Отправлено: 07 Июля, 2013 - 18:54:24
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Значит, Вы что-то делаете не так:
CODE (bash):
скопировать код в буфер обмена
  1. user@host:/path$ cat input.txt
  2. 123 456 231 546 231 312 4556
  3. user@host:/path$ php 20130706.php
  4. 123 231 231 312
  5. 456 546
  6. 4556


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
VenZell
Отправлено: 07 Июля, 2013 - 18:54:28
Post Id


Частый гость


Покинул форум
Сообщений всего: 237
Дата рег-ции: Июнь 2013  


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




А-а-а-а! Похоже, я изобретатель велосипедов.
PHP:
скопировать код в буфер обмена
  1. $text = '123 456 231 546 231 312 4556';
  2. $splitted = array();
  3. $result = '';
  4. function get_keys_for_duplicate_values($source)
  5. {
  6.     $dups = array();
  7.     foreach ($source as $key => $val) {
  8.         if (isset($dups[$val])) {
  9.             $dups[$val][] = $key;
  10.         } else {
  11.             $dups[$val] = array($key);
  12.         }
  13.     }
  14.     return $dups;
  15. }
  16.  
  17. $words = explode(' ', $text);
  18.  
  19. foreach ($words as $word) {
  20.     $chars = str_split($word);
  21.     natsort($chars);
  22.     array_push($splitted, implode('', $chars));
  23. }
  24. unset($word);
  25.  
  26. $dups = get_keys_for_duplicate_values($splitted);
  27.  
  28. foreach ($dups as $pos) {
  29.     foreach ($pos as $word_key) {
  30.         $result .= $words[$word_key] . ' ';
  31.     }
  32.     $result = rtrim($result, ' ') . "<br>";
  33. }
  34. echo $result;

(Отредактировано автором: 07 Июля, 2013 - 18:55:06)

 
 Top
Саныч Модератор
Отправлено: 07 Июля, 2013 - 21:25:19
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




PHP:
скопировать код в буфер обмена
  1. $input = explode(' ', file_get_contents('t1.txt'));
  2. $output = array();
  3.  
  4. foreach ($input as $inStr) {
  5.     foreach ($output as $outKey => $outArr) {
  6.         $outStr = reset($outArr);
  7.         $inStrLen = strlen($inStr);
  8.         if (strlen($outStr) != $inStrLen)
  9.             continue;
  10.         $outStr = str_split($outStr);
  11.         for ($n = 0; $n < $inStrLen; $n++) {
  12.             $outStrKey = array_search($inStr{$n}, $outStr);
  13.             if ($outStrKey === false)
  14.                 continue 2;
  15.             unset($outStr[$outStrKey]);
  16.         }
  17.         $output[$outKey][] = $inStr;
  18.         continue 2;        
  19.     }
  20.     $output[][] = $inStr;
  21. }
  22.  
  23. foreach ($output as $outArr)
  24.     echo implode(' ', $outArr), PHP_EOL;


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 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