2013-11-16 2 views
-1

это результат print_r ($ _ POST [ 'выберите']):Как решить "Уведомление: Неопределенное смещение"?

Array 
(
    [7_222] => 5 
    [7_333] => 4 
    [7_444] => 5 
    [8_222] => 3 
    [8_333] => 5 
    [8_444] => 2 
    [9_222] => 5 
    [9_333] => 3 
    [9_444] => 1 
) 

это мой код:

foreach($_POST['select'] as $k => $v) { 
    $k=explode('_',$k); 
    $row=$k[0]; 
    $column=$k[1]; 
    $matrix[$row][$column]=$v; 
} 
$cb = count($matrix); 
$ck = isset($matrix[$row])?count($matrix[$column]):0; 

for($row1=0;$row1<$cb;$row1++) { 
    for($row2=0;$row2<$cb;$row2++) { 
     if($row1!=$row2) { 
      echo 'r'.($row1+1).' compared r'.($row2+1).'(r'.($row1+1).($row2+1).') : '; 
      $k=array(); 
      for($column=0;$column<$ck;$column++) { 
       if($matrix[$row1][$column]>$matrix[$row2][$column]) { 
        $k[]='k'.($column+1); 
       } 
      } 
      echo implode(',',$k).'<br>'; 
     } 
    } 
} 

это моя проблема: Примечание: Undefined смещение: 0 в C : ........

как решить эту проблему?

+0

Проверьте «Связанные» бар справа (и начать использовать Google ** BEFORE ** вы задаете вопрос здесь) – zerkms

+0

Вы отслеживали номер строки, где происходит ошибка? – vbrmnd

+0

Возможный дубликат [Примечание: неопределенное смещение: 0 in] (http://stackoverflow.com/questions/6549561/notice-undefined-offset-0-in) –

ответ

0

Проблема у Вас есть что $matrix не индексируется от 0 до X, print_r($matrix) дает:

Array 
(
    [7] => Array 
     (
      [222] => 5 
      [333] => 4 
      [444] => 5 
     ) 

    [8] => Array 
     (
      [222] => 3 
... etc ... 

) 

Так что вам на самом деле нужна ваша for($row... цикл идти 7, 8, 9 не 0, 1, 2. Как было предложено Ньюман, самый простой способ сделать это было бы использовать foreach, что-то вроде этого:

foreach($matrix as $row1=>$columns) { 
    foreach($matrix as $row2=>$columns2) { 
     if($row1!=$row2) { 
      echo 'r'.($row1+1).' compared r'.($row2+1).'(r'.($row1+1).($row2+1).') : '; 
      $k=array(); 
      foreach($columns as $column=>$value) { 
       if($matrix[$row1][$column]>$matrix[$row2][$column]) { 
        $k[]='k'.($column+1); 
       } 
      } 
      echo implode(',',$k).'<br>'; 
     } 
    } 
} 

EDIT: Для включения строк и столбцов, считается, что требуется. Обратите внимание, что мы до сих пор используют старые значения для индекса массива, но мы также в том числе счетчик для использования в выходных данных:

$row1_count= 1; 
$row2_count= 1; 
$column_count= 1; 

foreach($matrix as $row1=>$columns) { 
    foreach($matrix as $row2=>$notused) { 
     if($row1!=$row2) { 
      echo 'r'.($row1_count).' compared r'.($row2_count).'(r'.($row1_count).($row2_count).') : '; 
      $k=array(); 
      foreach($columns as $column=>$value) { 
       if($matrix[$row1][$column]>$matrix[$row2][$column]) { 
        $k[]='k'.($column_count); 
       } 
       $column_count++; // Next column 
      } 
      $column_count= 1; // Reset the column count 
      echo implode(',',$k).'<br>'; 
     } 
     $row2_count++; // Next row 
    } 
    $row2_count= 1; // Reset the second row count 
    $row1_count++; // Next row 
} 
+0

этот результат:
r8 сравнивается r9 (r89): k112 , K334
r8 по сравнению r10 (R810): K223, K334
г9 сравнению r8 (R98): K223
R9 по сравнению r10 (R910): K223, K334
r10 сравнению r8 (R108):
r10 сравнению г9 (r109): k112
г1 сравнению г3 (R13): k2, k3
r2 по сравнению R1 (R21): к2
г2 по сравнению г3 (R23): k2, k3
г3 по сравнению R1 (R31):
г3 по сравнению г2 (R32): k1
пожалуйста, помогите мне. – oscar

+0

Предполагая, что вы не можете полагаться на номера строк, всегда являющихся последовательными, самым простым способом, вероятно, будет наличие счетчика внутри каждой из циклов foreach и использование этого в вашем выходе. – danielpsc

+0

Я все еще смущен. Вы можете редактировать код выше, так что код выглядит следующим образом: r1 по сравнению r2 (r12): k1, k3
r1 сравниваемых r3 (r13): k2, k3
r2 сравниваемых r1 (r21): k2
r2 по сравнению r3 (r23): k2, k3
r3 сравнивается r1 (r31):
r3 сравнивается r2 (r32): k1
oscar

0

В первом Еогеасп вы заполняете $ -матрица и использование индексов: 7,8,9

Во втором сценарии вы пытаетесь доступа к этому массиву по индексу от 0

Смежные вопросы