打印关联数组时消除'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 Chairs

2: Dishes Array

卫生间:0:毛巾

1:药品

2:淋浴凝胶阵列

卧室:床:腿:4

床单:羊毛

毯子:Winter: Thick

Summer: Thin Array Array Array

人:只有我

我如何摆脱与其他值打印的'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 Chairs

2:盘子

卫生间:0:毛巾

1:药品

2:沐浴露

卧室:床:腿:4

床单:羊毛

毯子:Winter: Thick

Summer: Thin Array Array

人:只有我

Thin

之后打印两个Array

编辑3:对不起,我的错误,接受的结果工作完美。在测试时,我有两个函数一起命名为my_roommy_room2,在测试时,两个函数一起显示Array,但是当我注释掉my_room2并只显示my_room函数时,它的答案是完美的。很抱歉造成任何混淆,我正在一起测试两个函数,输出很奇怪。

标:

根据下面的答案,我把它改成了好看的一行三元操作符,比如:
function my_room($params) {
foreach ($params as $key => $value) {
            yes_it_is(" <br /> ".$key." : ");
            is_array($value) ? my_room($value) : yes_it_is($value." <br /> ");
    }
}

将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 /> ");
    }
}

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

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

Edit:等等,您之前正在与"<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 /> ");
        }
    }
}
function yes_it_is($val) {
    if (is_array($val)) {
       print_r($val);
       //OR echo "<pre>"; print_r($val):
    } else {
       echo $val;
    }
}

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。如果您事先检查以确保它确实是一个数组,您就不会得到那个错误。我还建议您打开错误报告,并阅读数组手册。

相关内容

  • 没有找到相关文章