1

我有以下 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:菜品阵列

浴室 : 0 : 毛巾

1:药品

2 : 沐浴露阵列

卧室:床:腿:4

床单:羊毛

毯子:冬天:厚

夏季:薄阵列阵列

人:只有我

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

编辑:

我只想打印关联数组中的键和值,而不是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

Edit3:对不起我的错误,接受的结果完美无缺。在测试时,我有两个函数一起使用 namemy_roommy_room2,同时Array显示了两个函数一起测试,但是当我注释掉my_room2并且只显示my_room答案中的函数时,它工作得很好。抱歉造成的任何混乱,我一起测试了两个函数,输出很奇怪。

编辑4:

根据下面的答案,我将其更改为好看的单行三元运算符,例如:

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

4 回答 4

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 /> ");
    }
}
于 2013-03-12T18:32:43.673 回答
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 /> ");
        }
    }
}
于 2013-03-12T18:30:28.280 回答
0
function yes_it_is($val) {
    if (is_array($val)) {
       print_r($val);
       //OR echo "<pre>"; print_r($val):
    } else {
       echo $val;
    }
}
于 2013-03-12T18:31:13.900 回答
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 /> ");
        }
    }
}

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

于 2013-03-12T18:35:48.640 回答