消除'Array'字符串同时打印关联数组

时间:2013-03-12 18:27:48

标签: php arrays multidimensional-array

我有以下PHP代码

    <?php
$myRoom = array(
                'Kitchen' => array('Dining Table','4 Chairs','Dishes'),
                'Bathroom' => array('Towel','Medicines','Shower Gel'),
                'Bedroom' => array(
                                'Bed' => array(
                                            'Legs' => 4,
                                            'Bedsheet' => 'woolen',
                                            'Blanket' => array(
                                                               'Winter' => 'Thick',
                                                               'Summer' => 'Thin',
                                                            ),
                                ),
                                  ),
                'Person' => 'Only Me',
                );
my_room($myRoom);

function my_room($params) {
    foreach ($params as $key => $value) {
        yes_it_is(" <br /> ".$key." : ");
        my_room($value);
        yes_it_is($value." <br /> ");
    }
}

function yes_it_is($val) {
   echo $val;    
}

下面的函数打印字符串,代码输出如下:

  

厨房:0:餐桌

     

1:4椅子

     

2:Dishes Array

     

浴室:0:毛巾

     

1:药物

     

2:沐浴露阵列

     

卧室:床:腿:4

     

床单:羊毛

     

毯子:冬天:厚

     

夏季:薄阵列阵列

     

人:只有我

如何摆脱使用其他值打印的'Array'字符串。任何其他解决方法也将不胜感激。

编辑:

我想只打印关联数组中的键和值,而不是Array作为输出中的字符串。

Edit2:根据Daedelus的建议更新了问题

我更改了my_room功能,如下所示:

function my_room($params) {
foreach ($params as $key => $value) {
            yes_it_is(" <br /> ".$key." : ");
            if (is_array($value))
                my_room($value);
            else
                yes_it_is($value." <br /> ");
    }
}

但输出仍然是:

  

厨房:0:餐桌

     

1:4椅子

     

2:菜肴

     

浴室:0:毛巾

     

1:药物

     

2:沐浴露

     

卧室:床:腿:4

     

床单:羊毛

     

毯子:冬天:厚

     

夏季:薄阵列

     

人:只有我

Array

之后打印了两个Thin

编辑3:抱歉我的错误,接受的结果完美无缺。在测试时,我有两个函数,名为my_roommy_room2,同时显示了两个函数Array的测试,但是当我注释掉my_room2并且只显示{{ 1}}在答案中起作用,它完美地运作。对于造成的任何混乱,我很抱歉,我正在测试两个功能,输出很奇怪。

Edit4:

根据以下答案,我将其改为好看的一线三元运算符,如:

my_room

4 个答案:

答案 0 :(得分:2)

将my_room更改为以下内容(以检查它是否为数组)

function my_room($params) {
foreach ($params as $key => $value) {
            yes_it_is(" <br /> ".$key." : ");
            if (is_array($value))
                my_room($value);
            else
                yes_it_is($value." <br /> ");
    }
}

答案 1 :(得分:0)

如果您只想忽略传递给函数的数组:

function yes_it_is($val) {
   if (!is_array($val)) {
       echo $val;
   }
}

编辑:等等,您之前正在与"<br />"连接,所以这不起作用。更好的解决方案:

function my_room($params) {
    foreach ($params as $key => $value) {
        yes_it_is(" <br /> ".$key." : ");
        if (is_array($value)) {
            my_room($value);
        } else {
            yes_it_is($value." <br /> ");
        }
    }
}

答案 2 :(得分:0)

function yes_it_is($val) {
    if (is_array($val)) {
       print_r($val);
       //OR echo "<pre>"; print_r($val):
    } else {
       echo $val;
    }
}

答案 3 :(得分:0)

is_array应该这样做:

function my_room($params) {
    foreach ($params as $key => $value) {  
        yes_it_is(" <br /> ".$key." : ");
        if (is_array($value)) {
            my_room($value);
        }
        else {
            yes_it_is($value." <br /> ");
        }
    }
}

否则会发生什么...您正在尝试将数组转换为字符串,并以字符串Array形式出现。如果您事先进行检查以确保它确实是一个数组,那么您将不会收到该错误。我还建议您打开错误报告,并阅读manual for arrays