2010-11-16 75 views
1

我有一个数组的数组里面,我想简单地打印出它的内容......是什么问题,我想不工作...即在数组内部显示数组?

 foreach($retval as $k=>$v){ 

      if (is_array($v)){ 

      foreach($v as $l=>$w){ 

      echo $l . ' = ' . $w . '<br />'; 

      } 

     } else { 

      echo $k . ' = ' . $v . '<br />'; 

     } 

这样做是但是我结束了:

ID = 2

名称=扬声器

form_field =隐藏

display_order = 0

组=阵列

所以我不会在这里面得到数组一个foreach ..我究竟做错了什么?看起来实际上我的代码认为每个返回都是一个数组,当我确信只有'组'是一个数组。


阵列的结构看起来像这样:

array (0 => array ('id' => 2, 'name' => 'Speakers', 'form_field' => 'hidden', 'display_order' => '0', 'groups' => array (0 => array ('bit' => '1', 'name' => 'don', 'display_order' => '4', 'subscribers' => 8,), 1 => array ('bit' => '2', 'name' => 'tyler', 'display_order' => '5', 'subscribers' => 0,), 2 => array ('bit' => '4', 'name' => 'stephen', 'display_order' => '6', 'subscribers' => 0,), 3 => array ('bit' => '8', 'name' => 'daniel', 'display_order' => '7', 'subscribers' => 0,), 4 => array ('bit' => '16', 'name' => 'william', 'display_order' => '8', 'subscribers' => 0,), 5 => array ('bit' => '32', 'name' => 'bobbys', 'display_order' => '9', 'subscribers' => 0,),),),) 

长话短说,我其实只是想为说这个名字“博比”来搜索这件事,并得到一个简单的真或者假设该值是否存在于那里。

+0

那么你的阵列结构是什么样子?你可以使用'var_export($ retval)' – drudge 2010-11-16 23:51:56

+0

来感谢它 - 我已经更新了这篇文章。 – willdanceforfun 2010-11-16 23:56:11

+1

FWIW,你嵌套的'foreach()'不显示任何缩进,所以它会产生误导输出。 – staticsan 2010-11-17 02:29:10

回答

1

假设数组只是双重嵌套,而$retval[<something>]['groups']也是一个数组。使用递归来处理这个问题,而不是仅仅在关卡上添加关卡。

+0

他们深入2层以上?!?这是疯狂的 – willdanceforfun 2010-11-16 23:59:37

+0

感谢ignacio,我正在查找现在递归搜索的东西。 – willdanceforfun 2010-11-17 00:02:17

+0

我已经使用七个维度的数组,并且嵌套了四个深度的循环。做了一些计划,让我告诉你。 – staticsan 2010-11-17 02:30:18

3
print_r($myArray); 

PHP Manual

<?php 
    $a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z')); 
    print_r ($a); 
?> 

会给:

Array 
(
    [a] => apple 
    [b] => banana 
    [c] => Array 
     (
      [0] => x 
      [1] => y 
      [2] => z 
     ) 
) 

不知道这是你在找什么...

print_r()给你,而var_export()的可视化表示返回有效的,可执行的PHP代码。 Manual: var_export()

+0

我很感激。欢呼粉红色弗洛伊德 – willdanceforfun 2010-11-17 00:02:47

1

使用RecursiveArrayIterator裹在RecursiveIteratorIterator。那么语法为:

$arr = array('this is your complicated multi-dimensional array'); 
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); 
foreach($iterator as $key => $value){ 
    echo '['.$key.'] => '.$value.'<br />'; 
} 

你甚至可以使用$iterator->depth()来确定当前元素的深度。

1

这听起来像你需要重新考虑你想要做的事情。

如果您只想查看数组中的内容,以便知道如何获取某个特定数据,那么您可能会使用print_r,var_export或上面提到的类似方法。

print_r($retval); 

如果你想你的PHP脚本能够制定出在它自己的“博比”是否在阵中,那么你可能有一些更多的信息,这将有助于你的搜索。例如,你知道你的数组的结构,并且你正在寻找一个名字吗?如果是这样,那么你只需要检查$ array [$ foo] ['name']中的字符串。你可以调整你的代码如下所示:

foreach($retval as $k=>$v) { 
    if ($v['name'] == 'bobby') { 
     echo "Bobby is at index $k"; 
    } 
} 

PHP包含lots of functions for arrays,但这些往往是单维数组。

P.S.请编辑数组的结构以使其更易于阅读。

1

如果你的目标是要了解某个值在任何嵌套数组,你可以这样做:

foreach($retval as $vec){ 
    if(in_array("bobby", $vec) 
     do something