这是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: ........
如何解决这个问题?
答案 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
}