2013-04-04 41 views
0

我想从多维数组输出分组数据。考虑最高级别的数组键“组”,然后在组内是单独的搜索行。在多维数组上使用的循环内的循环可以将数据分组吗?

例如$group[ 0 ][ 1 ]将是'组1,行1'。

我想显示来自每个组的所有行,然后通过插入'<hr />'标签表示该组已更改。此时第一组显示正确,然后显示hr标签,但不显示第二组结果。我的循环内循环方法是否错误?是否有可能像这样使用多维数组? 谢谢!

我的数组是这样的:

Array 
(
[0] => Array 
    (
     [0] => stdClass Object 
      (
       [name] => testing 
       [searchID] => 131 
       [lineID] => 190 
       [searchString] => 1 
      ) 

     [1] => stdClass Object 
      (
       [name] => testing 
       [searchID] => 131 
       [lineID] => 191 
       [searchString] => 2 
      ) 

     [2] => stdClass Object 
      (
       [name] => testing 
       [searchID] => 131 
       [lineID] => 192 
       [searchString] => 3 
      ) 

     [3] => stdClass Object 
      (
       [name] => testing 
       [searchID] => 131 
       [lineID] => 193 
       [searchString] => 4 
      ) 

    ) 

[1] => Array 
    (
     [4] => stdClass Object 
      (
       [name] => test2 
       [searchID] => 132 
       [lineID] => 199 
       [searchString] => 1 
      ) 

     [5] => stdClass Object 
      (
       [name] => test2 
       [searchID] => 132 
       [lineID] => 200 
       [searchString] => 2 
      ) 

    ) 

) 

我的代码如下所示:

$x = 0; 
$y = 0; 
while($x < count($groups)) 
{ 
while($y < count($groups[ $x ])) 
{ 
    //display each single search string 
    echo $groups[ $x ][ $y ]->searchString.'<br>'; 
    $y++; 
} 
echo '<hr>'; 
$x++; 
} 

回答

0

看着你的榜样阵列,您的第二组的y值应该开始在4个环,直到它达到6

我会使用建议您foreach循环。 http://php.net/manual/en/control-structures.foreach.php

您的代码将如下所示:

foreach ($groups as $gKey => $gValue) 
{ 
    foreach ($gValue as $key => $value) 
    { 
     echo $groups[$gKey][$key]->searchString . "<br />"; 
     // or $value->searchString . "<br />"; 
    } 
    echo "<hr />"; 
} 
+0

这种方式比我的方式更简单更优雅。我一定会在将来这样做,谢谢! :) – 2013-04-04 15:14:20

0

您需要重置y第一循环中。

$x = 0; 
while($x < count($groups)) 
{ 
    $y = 0; 
    while($y < count($groups[ $x ])) 
    { 
     //display each single search string 
     echo $groups[ $x ][ $y ]->searchString.'<br>'; 
     $y++; 
    } 
    echo '<hr>'; 
    $x++; 
} 
+0

我不这么认为,因为第二个键([X] >> [Y] <<)做不是从每个新组的0开始,请检查我提供的数组。我尝试重置y并获得此通知 – 2013-04-04 15:04:54

+0

注意:未定义的偏移量:0在...上线423 – 2013-04-04 15:05:12

+0

@KelseyThorpe然后使用一段时间不会工作,因为'count($ groups [$ x] $ y])'on第二个循环将是2,但'y'将等于4 – 2013-04-04 15:07:26

1

您可以尝试

foreach ($groups as $group) { 
    foreach ($group as $var) { 
     echo $var->searchString, "<br />"; 
    } 
} 
+0

第二个循环不应该在组上?不是群组 – 2013-04-04 15:07:57

+0

更正了...谢谢 – Baba 2013-04-04 15:09:54

0

尝试的foreach:

foreach ($groups as $x => $group) 
{ 
    foreach ($group as $y => $subGroup) 
    { 
     echo $subGroup->searchString . '<br>'; 
    } 
    echo '<hr>'; 
}