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

シーツ : ウール

毛布 : 冬 : 厚手

夏:シンアレイアレイ

人物 : 私だけ

後に2枚Array印刷されていますThin

Edit3: 申し訳ありませんが、私の間違いです。受け入れられた結果は完全に機能します。テスト中に namemy_roommy_room2の 2 つの関数を一緒に使用し、両方の関数を一緒Arrayにテストすると表示されましたが、コメントアウトして回答のように関数my_room2のみを表示すると、完全に機能します。my_room混乱が生じて申し訳ありません。2 つの関数を一緒にテストしていたのですが、出力が変でした。

編集4:

以下の回答に基づいて、次のような見栄えの良い1行の三項演算子に変更しました。

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

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。事前にチェックを行って、それが実際に配列であることを確認すると、そのエラーは発生しません。また、エラーレポートをオンにすることをお勧めします。また、アレイのマニュアルを読むことをお勧めします。

于 2013-03-12T18:35:48.640 に答える
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 に答える