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 » PHP » Программирование на PHP » сравнения

Страниц (1): [1]
 

1. SAD - 06 Ноября, 2009 - 23:20:35 - перейти к сообщению
столкнулся с , вроде , простой проблемой.
есть двумерный массив вида

23 5353 3535 35 5 45
45 45 454 454 545
45 454 545 454 45
......
кол-во элементов равно в каждой строке.
я сравниваю каждый элемент каждой строки с каждым элементом другой строки.

вот в чем проблема, у меня допустим из 20 строк в трех строках есть число 67, я вывожу так результат совпадения

строка№1 строка№2 совпадающие числа

в моем случае должно вывести

строка№3 строка№12 67
строка№3 строка№13 67
строка№12 строка№13 67

а у меня не выводит
строка№3 строка№13 67

не знаю в чем прикол, может есть идеи?

я этот массив считываю с файла, может быть числа могли по разному там быть записаны?
2. JROUD - 07 Ноября, 2009 - 01:27:16 - перейти к сообщению
Если бы вы хотя бы показали ваш код, а так только могу предложить моё решение для массива 20Х20
PHP:
скопировать код в буфер обмена
  1.  
  2. for ($i1=0; $i1<20; $i1++)
  3. {
  4.         for ($j1=0; $j1<20; $j1++)
  5.         {
  6.                 for ($i2=0; $i2<20; $i2++)
  7.                 {
  8.                         for ($j2=0; $j2<20; $j2++)
  9.                         {
  10.                                 if ($i2==0 && $j2==0) continue;
  11.                                 elseif ($A[$i1][$j1]==$A[$i2][$j2])
  12.                                 {
  13.                                         echo ("Числа по адресам A($i1 ; $j1) и A($i2 ; $j2) совпадают и равны $A[$i2][$j2]");
  14.                                 }
  15.                         }
  16.                 }
  17.         }
  18. }
  19.  
3. SAD - 07 Ноября, 2009 - 01:52:12 - перейти к сообщению
мой код

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.     //-- считывание с файла и создание многомерного массива
  4.     set_time_limit(900);
  5.     $src = fopen('keno.txt',"r");
  6.     while ( !feof($src) )
  7.       {
  8.         $mas[] = fgets($src,464564);  
  9.       }
  10.  
  11.     $raz=sizeof($mas);
  12.     for($i=0;$i<$raz;$i++)
  13.       {
  14.         $mas[$i]=explode(" ",$mas[$i]);
  15.       }
  16.      
  17.     fclose($src);
  18.  
  19.     $k=sizeof($mas[0]);
  20.  
  21.     //-- построение таблицы исходной
  22.  
  23.     echo '<table cellpadding=2 border=1 bordercolor=black cellspacing=0>';
  24.     for($i=$raz-20;$i<=$raz;$i++)
  25.       {
  26.         echo "<tr><td>$i</td>";  
  27.         for($j=4;$j<$k-1;$j++)
  28.           {
  29.             echo " <td><font color=black><b>".$mas[$i-1][$j]."</b></font></td> ";
  30.           }
  31.         echo '</tr>';
  32.       }
  33.     echo '</table>';
  34.  
  35. // метод и вывод результатов
  36.  
  37. for($i=$raz-21;$i<$raz-1;$i++)
  38.   {  
  39.     for($j=$i+1;$j<$raz;$j++)
  40.       {
  41.         $t=0;
  42.         for($kk=4;$kk<$k-1;$kk++)
  43.           {
  44.             for($p=4;$p<$k-1;$p++)
  45.               {
  46.                 if($mas[$i][$kk]==$mas[$j][$p])
  47.                   {
  48.                     $t++;
  49.                     break;
  50.                   }    
  51.               }  
  52.           }
  53.         if($t>2 AND $mas[$j][0]-$mas[$i][0]<5)
  54.           { ?><table border=1 cellspacing='0' cellpadding=3><tr>
  55.             <td bgcolor=yellow><? echo $i+1; ?></td>
  56.             <td bgcolor=pink><? echo $j+1; ?></td>
  57.             <td></td>
  58.             <td></td>
  59.             <?
  60.             for($kk=4;$kk<$k-1;$kk++)
  61.               {
  62.                 for($p=4;$p<$k-1;$p++)
  63.                   {
  64.                     if($mas[$i][$kk]==$mas[$j][$p])
  65.                       {
  66.                         if($mas[$i][$kk]>0 AND $mas[$i][$kk]<21)
  67.                           $mas[$i][$kk]="<font color=magenta>".$mas[$i][$kk]."</font>";
  68.                        
  69.                         if($mas[$i][$kk]>20 AND $mas[$i][$kk]<41)
  70.                           $mas[$i][$kk]="<font color=red>".$mas[$i][$kk]."</font>";
  71.                          
  72.                         if($mas[$i][$kk]>40 AND $mas[$i][$kk]<61)
  73.                           $mas[$i][$kk]="<font color=blue>".$mas[$i][$kk]."</font>";
  74.                        
  75.                         if($mas[$i][$kk]>60 AND $mas[$i][$kk]<81)
  76.                           $mas[$i][$kk]="<font color=lime>".$mas[$i][$kk]."</font>";
  77.                          
  78.                         echo "<td>".$mas[$i][$kk]."</td>";
  79.                        
  80.                       }
  81.                   }      
  82.               }
  83.             ?></tr></table><?
  84.           }
  85.       }
  86.   }
  87.  
  88. ?>

сам файл http://narod[dot]ru/disk/14840892000/keno[dot]txt

обратите на выведенную строку в таблице результатов 3129 3132, там должно быть число 67, и кстати число 9
4. SAD - 07 Ноября, 2009 - 13:31:27 - перейти к сообщению
ну взгляньте плиз. в чем может быть бок?
5. Ch_chov - 07 Ноября, 2009 - 13:39:42 - перейти к сообщению
SAD, может лучше не делать «матрёшку» из вложенных циклов, а использовать in_array?
6. SAD - 07 Ноября, 2009 - 13:41:48 - перейти к сообщению
я же не ищу что то в массиве, а сравниваю элементы. или я что то не понял?
7. Ch_chov - 07 Ноября, 2009 - 13:49:07 - перейти к сообщению
Разве ты не ищешь совпадения элементов?
(Добавление)
array_search
8. SAD - 07 Ноября, 2009 - 13:55:30 - перейти к сообщению
а как прикрутить это дело? и так понимаю выведет те строки где есть номер определенный, а мне надо,чтобы выводило как у меня
9. Ch_chov - 07 Ноября, 2009 - 14:56:01 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. foreach($mas as $fk => $fv)
  2.   foreach ($mas as $sk => $sv)
  3.     if ($fk >= $sk) continue;
  4.     else echo 'стр. №',$fk,' и стр. №',$sk,' = ',implode(' ', array_intersect ($fv, $sv)),'<br/>';
10. SAD - 07 Ноября, 2009 - 15:12:20 - перейти к сообщению
реально работает, спасибо большое, теперь надо под себя модифицировать

 

Powered by ExBB FM 1.0 RC1