如何解决“通知:未定义的偏移量”?

时间:2013-11-16 05:33:07

标签: php

这是print_r($ _ POST ['select'])的结果:

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>';
        }
    }
}

这是我的问题: 注意:未定义的偏移量:C中为0: ........

如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

在第一个foreach中,你填写$ matrix并使用索引:7,8,9

在第二个脚本中,您尝试通过索引从0

访问此数组

答案 1 :(得分: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>';
        }
    }
}

编辑:按要求包含行数和列数。请注意,我们仍然使用旧值来索引数组,但我们还包括要在输出中使用的计数:

$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
}