2016-04-15 16 views
1

私はこのような配列をsimplexmlelementを使ってforeachループで出力しました。入れ子にされた配列とオブジェクトを持つPHPで再帰関数を使用するには?

array(16) { 
    ["Binding"]=> 
    string(11) "Electronics" 
    ["Brand"]=> 
    string(8) "Micromax" 
    ["Feature"]=> 
    array(4) { 
    [0]=> 
    string(29) "80 centimeters LED 1366 x 768" 
    [1]=> 
    string(55) "Connectivity - Input: HDMI*1, USB*1, Component*1, VGA*1" 
    [2]=> 
    string(405) "Installation: For requesting installation/wall mounting/demo of this product once delivered, please directly call Micromax support on 1860-500-8899." 
    [3]=> 
    string(88) "Warranty Information: 1 year warranty provided by the manufacturer from date of purchase" 
    } 
    ["ItemDimensions"]=> 
    object(SimpleXMLElement)#300 (4) { 
    ["Height"]=> 
    string(4) "1693" 
    ["Length"]=> 
    string(4) "2898" 
    ["Weight"]=> 
    string(4) "1213" 
    ["Width"]=> 
    string(3) "315" 
    } 
    ["Label"]=> 
    string(8) "Micromax" 
    ["Manufacturer"]=> 
    string(8) "Micromax" 
    ["Model"]=> 
    string(10) "32T7250MHD" 
    ["MPN"]=> 
    string(14) "MCX_32T7250MHD" 
    ["PackageDimensions"]=> 
    object(SimpleXMLElement)#301 (4) { 
    ["Height"]=> 
    string(3) "680" 
    ["Length"]=> 
    string(4) "3250" 
    ["Weight"]=> 
    string(4) "2015" 
    ["Width"]=> 
    string(4) "2260" 
    } 
    ["PackageQuantity"]=> 
    string(1) "1" 
    ["PartNumber"]=> 
    string(14) "MCX_32T7250MHD" 
    ["ProductGroup"]=> 
    string(2) "CE" 
    ["ProductTypeName"]=> 
    string(10) "TELEVISION" 
    ["Publisher"]=> 
    string(8) "Micromax" 
    ["Studio"]=> 
    string(8) "Micromax" 
    ["Title"]=> 
    string(52) "Micromax 32T7250MHD 80cm (32 inches) HD Ready LED TV" 
} 

私はこの配列からほぼすべてをhtmlに出力するために再帰関数を使用しています。私の再帰関数は次のようになります。

<ul> 
    <li></li> 
    <li>Binding: Electronics</li> 
    <li>Brand: Micromax</li> 
    <ul> 
     <li></li> 
     <li>0: 80 centimeters LED 1366 x 768</li> 
     <li>1: Connectivity - Input: HDMI*1, USB*1, Component*1, VGA*1</li> 
     <li>2: Installation: For requesting installation/wall mounting/demo of this product once delivered, please directly call Micromax support on 1860-500-8899.</li> 
     <li>3: Warranty Information: 1 year warranty provided by the manufacturer from date of purchase</li> 
    </ul> 
    <ul> 
     <li> 
      <ul> 
       <li></li> 
      </ul> 
      <ul> 
       <li></li> 
      </ul> 
      <ul> 
       <li></li> 
      </ul> 
      <ul> 
       <li></li> 
      </ul> 
     </li> 
    </ul> 
    <li>Label: Micromax</li> 
    <li>Manufacturer: Micromax</li> 
    <li>Model: 32T7250MHD</li> 
    <li>MPN: MCX_32T7250MHD</li> 
    <ul> 
     <li> 
      <ul> 
       <li></li> 
      </ul> 
      <ul> 
       <li></li> 
      </ul> 
      <ul> 
       <li></li> 
      </ul> 
      <ul> 
       <li></li> 
      </ul> 
     </li> 
    </ul> 
    <li>PackageQuantity: 1</li> 
    <li>PartNumber: MCX_32T7250MHD</li> 
    <li>ProductGroup: CE</li> 
    <li>ProductTypeName: TELEVISION</li> 
    <li>Publisher: Micromax</li> 
    <li>Studio: Micromax</li> 
    <li>Title: Micromax 32T7250MHD 80cm (32 inches) HD Ready LED TV</li> 
</ul> 

ご覧のとおり、オブジェクトの内部配列のキーと値が完全に欠落している:

function recurseTree($var){ 
    $out = '<li>'; 
    foreach($var as $k=>$v){ 
    if(is_array($v) || is_object($v)){ 
     $out .= '<ul>'.recurseTree($v).'</ul>'; 
    }else{ 
     $out .= '<li>' .$k .': ' .$v .'</li>'; 
    } 
    } 
    return $out.'</li>'; 
} 

私が手出力は次のようなものです。 (例えば名前["ItemDimensions"]を持つオブジェクトが出力に表示されないだけでなく、再帰関数を使用して、これらのオブジェクトはまた、配列のキー名は、例えば(欠けていることに注意してI出力を行う方法

["ItemDimensions"]=> 
    object(SimpleXMLElement)#300 (4) { 
    ["Height"]=> 
    string(4) "1693" 
    ["Length"]=> 
    string(4) "2898" 
    ["Weight"]=> 
    string(4) "1213" 
    ["Width"]=> 
    string(3) "315" 
    } 

を。?:名前["Feature"]は)出力には表示されません。配列を探していたときにあなたは、単にあなたの場合の条件内でそれらを使用していないので、アレイ用のI出力、これらのデータの欠落?ありがとう。

答えて

2

キーが表示されないことができますどのように

/objects。私はこのような何かに関数を変更します:

function recurseTree($var){ 
    $output = ''; 
    foreach($var as $k=>$v){ 
     if(is_array($v) || is_object($v)){ 
      $output .= '<li>' . $k . '<ul>'.recurseTree($v).'</ul></li>'; 
     }else{ 
      $output .= '<li>' .$k .': ' .$v .'</li>'; 
     } 
    } 
    return $output; 
} 

あなたのオブジェクトのキー/値が返されない理由については、あまりよく分かりません。私はSimpleXmlElementオブジェクトとstdClassを使ってこれをテストしましたが、どちらもうまく動作します。

+0

私もテストしましたが、私のためにも動作します。 – fusion3k

+0

@georaldc変更された関数を使用した後、配列のキーが表示されるようになりました。しかし、それらのネストされた配列の値はまだ出力に現れていません。 –

+0

@ fusion3k質問で与えた配列を使ってテストしましたか?私はネストされた配列の値を取得していないので、配列に何か問題があると思われます。 –

関連する問題