计算特定细胞

时间:2011-10-31 03:15:09

标签: php arrays count

我目前有一个二维数组,其数据如下:

    X   X   X       X
    X   X   X       X
        X       X   X
        X   X   X   X
    X   X       X   X
    X   X   X   X   X

X标记有数据的单元格,空白表示空白。 我最后一小时一直在拉头发,想弄清楚如何计算我称之为“洞”的东西。 它基本上是一个在具有数据的两个单元之间具有空数据的单元。 所以按顺序你可以看到cols从左到右分别有2个,0个,2个,0个,0个孔。 我的函数需要返回总空洞,所以对于这种情况4。

目前我已经完成了这个非常接近但我的功能是计算第4个col上的2个第一个单元格,这是错误的,我无法弄清楚如何解释它。

这是我的实际代码:

public function countHoles(){
        $total = 0;
        for($i=0; $i<5; $i++){
            $counting = false;
            $passed = false;
            for($j=0; $j<10; $j++){
                if(count($this->table[$j][$i])>0){
                    $passed = true;
                }
                if($passed && !$counting && count($this->table[$j][$i])==0){
                    $counting = true;
                }
                else{
                    $counting = false;
                }
                if($passed && $counting){
                    $total++;
                }
            }
        }
        return $total;
    }

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我在javascript中有一个答案,试试这个:

var arr = [[1,2,3,null,5],[1,2,3,null,5],[null,2,null,null,5],[null,2,3,4,null],[1,null,null,4,5],[1,2,3,4,null]];  
var hole = 0;   
for(var i=0; i<arr.length; i++){        
    for(var j=1; j<arr[i].length-1; j++){
        if(arr[i][j]==null){
            for(var k=j;k<arr[i].length; k++){
                if(arr[i][k] != null){
                    k = arr[i].length;
                }else{
                    j++;                        
                }
            }
            if(j < arr[i].length){                  
                hole++;
            }
        }
    }
}
alert(hole);

'hole'是具有孔数的var

答案 1 :(得分:0)

因此,如果我理解正确,您只想知道阵列中有多少空单元格,而不是边缘。

类似于计算句子中的空格数,但不计算开头或结尾的空格?

public function countHoles()
{
  $total = 0;

  // Start at 1 and go to Count() - 2
  for($i = 0; $i < 5; $i++)   // Horizontal
    for($j = 1; $j < 9; $j++) // Vertical
    {
      if (j == 1) // 2nd row
      {
        if ($this->table[$i][$j] == null && $this->table[$i][0] != null)
          $total++;
      }
      else if (j == 3) // 2nd last row
      {
        if ($this->table[$i][$j] == null && $this->table[$i][4] != null)
          $total++;
      }
      else
      {
        if ($this->table[$i][$j] == null)
          $total++;
      }
    }

  return $total;
}

这是你的意思吗?

(您可能需要将== null!= null替换为您需要的其他“空白”检查。此外,嵌套的IF显然可以被压缩 - 为了便于理解,我将其编写为扩展。 )