2011-09-25 48 views
1

我有一个多维数组的$doclist['area']['source'][#]['type']PHP COUNT_RECURSIVE只计算非数组值?

调我想获得一些非空的['type'] = "title"所有条目。

有没有简单的方法呢?

虽然我在这里,有没有办法让['type'] = "title"['area'] = "something"的所有条目都不是空的?

+0

一些代码示例? – J0HN

回答

2

假设由'area''source'你的意思是任意的字符串,你可以窝几个圈,像这样:

$num_titles = 0; 
foreach ($doclist as $area => $arr1) { 
    foreach ($arr1 as $source => $arr2) { 
     foreach ($arr2 as $k => $arr3) { 
      if (isset($arr3['title']) && strlen(trim($arr3['title']))) 
       $num_titles++; 
     } 
    } 
} 
print "Titles: {$num_titles}\n"; 
print "Areas: " . sizeof($doclist) . "\n"; 
+0

感谢您的结构化反应。 –

1

下面是我写的基于rfausak的响应函数:我想

function countdocs($arr,$x="",$y="") { 
     if (($x) && ($y)) { 
      return count($arr[$x][$y]); 
     } else if ($x) { 
      $r=0; 
      foreach ($arr[$x] as $arr1) { 
       $r+=count($arr1); 
      } 
      return $r; 
     } else { 
      $r=0; 
      foreach ($arr as $arr1) { 
       foreach ($arr1 as $arr2) { 
        $r+=count($arr2); 
       } 
      } 
      return $r; 
     } 
    } 

有人会觉得它有用。

0
$ships = array(
    "Passenger ship" => 
     array("Yacht", "Liner", "Ferry"), 
    "War ship" => 
     array("Battle-wagon", "Submarine", "Cruiser"), 
    "Freight ship" => 
     array("Tank vessel", "Dry-cargo ship", "Container 
     cargo ship") 
); 

function myCount($var, $i = 0){ 
    $cnt = 0; 
    foreach ($var as $v) { 
     if (is_array($v) and $i) 
      $cnt += myCount($v, 0); 
     $cnt++; 
    } 
    return $cnt; 
} 
echo myCount($ships, 1);