1

配列がどのように見えるかを知らずに、ネストされた配列を読み取る必要があります。

例えば;

$data = array(
        'Data1_lvl1' => array(
                            'Data1_lvl2' => "value",
                            'Data2_lvl2' => array(
                                                'Data1_lvl3' => "value"
                                            )
                        ),
        'Data2_lvl1' => 'value'
    );

次のような文字列にフォーマットする必要があります。

  1. Data1_lvl1 / Data1_lvl2 /
  2. Data1_lvl1 / Data2_lvl2 / Data1_lvl3 /
  3. Data2_lvl1 /

ただし、配列は任意のサイズにすることができ、その中にネストされた配列をいくつでも含めることができます。

4

4 に答える 4

2

配列要素の名前だけを出力したい場合は、この再帰関数でうまくいきます。

あなたのデータ:

$data = array(
        'Data1_lvl1' => array(
                            'Data1_lvl2' => "value",
                            'Data2_lvl2' => array(
                                                'Data1_lvl3' => "value"
                                            )
                        ),
        'Data2_lvl1' => 'value'
    );

働き:

function array2str($array, $str) {
  foreach($array as $key => $val) {
    if (is_array($val) ) {
        $str .= $key . '/';
        array2str($val, $str);
    }
  }
  echo $str.'<br />';  
  return $str;
}

array2str($data);

ご覧のとおり<br />、ブラウザで結果を表示するときに、スクリプト自体がECHOを実行して、行を分割します。

于 2012-05-22T13:19:30.763 に答える
2
$data = array(
        'Data1_lvl1' => array(
                            'Data1_lvl2' => "value",
                            'Data2_lvl2' => array(
                                                'Data1_lvl3' => "value"
                                            )
                        ),
        'Data2_lvl1' => 'value'
    );


function printArray($array)
{
    foreach ($array as $key=>$value)
    {
       echo $key.'/';
       if (is_array($value))
       {
          printArray($value);           
       } else {    
        echo '<br>';
        }

    }

}


printArray($data);
于 2012-05-22T13:20:48.003 に答える
1

1つの方法は、次のような関数を使用して配列を再帰的にウォークスルーすることです。

<?php
function f($d, $str = '') {
        foreach ($d as $key => $val) {
                if (is_array($val)) f($val, $str . '/' . $key); // If this element is array parse next level
                else print_r($str . '/' . $key . '/'); // Output current string or do what you need to do with it..
        }
}

$data = array(
        'Data1_lvl1' => array(
                            'Data1_lvl2' => "value",
                            'Data2_lvl2' => array(
                                                'Data1_lvl3' => "value"
                                            )
                        ),
        'Data2_lvl1' => 'value'
);

f($data);
于 2012-05-22T13:19:07.610 に答える
0

その機能で:

<?php
function print_tree ($data, $prefix = '', &$index = 1) {
  foreach($data as $key => $datum) {
    echo $index++ . '. ' . ($new_prefix =  $prefix . $key . '/') . PHP_EOL;
    if (is_array($datum)) {
      print_tree ($datum, $new_prefix, $index);
    }
  }
}

私は得る

  1. Data1_lvl1 /
  2. Data1_lvl1 / Data1_lvl2 /
  3. Data1_lvl1 / Data2_lvl2 /
  4. Data1_lvl1 / Data2_lvl2 / Data1_lvl3 /
  5. Data2_lvl1 /
于 2012-05-22T13:32:12.283 に答える