2012-03-28 39 views
2

以下はforeachと3次元配列ですが、ループに問題はありませんが、どの配列をエコーするかわからないので、echo $ subvalue、ループ3次元配列?私は実際にこのループで奇妙に感じる。 ADVのおかげでforeachを使用して3次元配列をループする方法PHP

foreach ($stories as $key => $story){ 
    //echo "<br />"; 
     foreach($story as $subkey => $subvalue){ 
      echo $subvalue."<br />"; 
       foreach($subvalue as $key => $subsubvalue){ 
        echo $subsubvalue."<br />"; 
       } 
     } 
} 

Array 
(
    [270] => Array 
     (
      [uid] => 36 
      [user_email] => [email protected] 
      [sid] => 270 
      [story_name] => Story C 
      [photo_url] => Array 
       (
        [0] => story_photos/2012/0322/361332381418153311.jpg 
        [1] => story_photos/2012/0322/361332393792911587.jpg 
       ) 

      [photo_added_date] => Array 
       (
        [0] => 1332381418 
        [1] => 1332393792 
       ) 

     ) 

    [269] => Array 
     (
     [uid] => 36 
     [user_email] => [email protected] 
     [sid] => 269 
     [story_name] => Story B 
     [photo_url] => Array 
      (
       [0] => story_photos/2012/0322/361332381406580761.jpg 
      ) 

     [photo_added_date] => Array 
      (
       [0] => 1332381406 
      ) 

    ) 

[268] => Array 
    (
     [uid] => 36 
     [user_email] => [email protected] 
     [sid] => 268 
     [story_name] => Story A 
     [photo_url] => Array 
      (
       [0] => story_photos/2012/0322/361332381393552719.jpg 
      ) 

     [photo_added_date] => Array 
      (
       [0] => 1332381393 
      ) 

    ) 

+0

私はあなたがここで達成しようとしていることを理解していません。 –

答えて

3

このしようとしないのはなぜ:あなたの質問は本当にクリアまたは指定されていないので、

foreach ($stories as $key => $story){ 
    if(is_array($story)){ 
     foreach($story as $subkey => $subvalue){ 
      if(is_array($subvalue)){ 
       foreach($subvalue as $key => $subsubvalue){ 
        echo $subsubvalue."<br />"; 
       } 
      } else { 
       echo $subvalue."<br />"; 
      } 
     } 
    } else { 
     echo $story."<br />"; 
    } 
} 

はまた、私はわかりません。

0

これは本当にあなたの質問に答えるが、ノート、あなたの第3のループはこれですされていません。

foreach ($subvalue as $key => $subsubvalue){ 

しかし、あなたはすでに最初のループで$キーを使用しました:

foreach ($stories as $key => $story){ 

あなたは第三にを変更する必要があります。

foreach ($subvalue as $subsubkey => $subsubvalue){ 
+0

ok、urアドバイスありがとう – vzhen

2

それとも

function echoArray($array) 
{ 
    foreach ($array as $key => $cell) 
    { 
     if (true == is_array($cell)) 
     { 
      echoArray($cell); 
     } 
     else 
     { 
      echo "$cell<br />"; 
     } 
    } 
} 

これはN dimensionnalアレイ

深さを知っていて、深さの異なるCSSクラスを使用して、値が追加されるべきタグ設定を使用するための改良されたバージョンのために働く:

例えば:ため深さ0は、クラスはarrayclass_0により、深さ1 arrayclass_1、等のために...

/** 
$array : The array 
$depth: The depth (you should always set it to 0) 
$cssclassprefix: The css class prefix you want to set 
$tag: the default tag to use to render 
$arraytagkey: An optionnal key in your array to extract the tag to use 
*/ 
function echoArray($array, $depth=0, $cssclassprefix='arrayclass_', $tag='div', $arraytagkey = '') 
{ 
    if (0 != strcmp($arraytagkey) && isset($array[$arraytagkey])) 
    { 
     $tag=$array[$arraytagkey]; 
    } 
    foreach ($array as $key => $cell) 
    { 
     if (true == is_array($cell)) 
     { 
      echoArray($cell, $depth+1, $cssclassprefix, $tag, $arraytagkey); 
     } 
     else 
     { 
      $matches = array(); 
      if (0 != preg_match("/^(img|iframe|input)$/i",$tag)) 
      { 
       if (0 != strcasecmp('input',$tag)) 
       { 
        echo "<input class='$cssclassprefix$depth' value='$cell' />"; 
       } 
       else 
       { 
        echo "<$tag class='$cssclassprefix$depth' src='$cell' />"; 
       } 
      } 
      else if(0 != preg_match("/^(br|hr)$/i",$tag)) 
      { 
       echo "$cell<$tag />"; 
      } 
      else 
      { 
       echo "<$tag class='$cssclassprefix$depth'>$cell</$tag>"; 
      } 
     } 
    } 
} 
+0

私よりも良い答え –

+0

返信いただきありがとうございます、これは無制限の深さのループに対してですか?実際には第2レベルのループが必要です。 – vzhen

+0

私はこのthxを試してみます – vzhen

0

はあなただけをループしたいとphoto_urlsやその他のデータへのアクセスを取得していますでしょうか?その場合は、次にここにあなたがデータにアクセスする方法の簡単な例を示します。

foreach($stories as $key => $story) 
{ 

    // here you can echo the $store['user_email'] etc 
    echo 'Email: ' . $story['user_email'] . '<br />'; 

    // loop over the photo urls 
    foreach($story['photo_url'] as $photo_url) 
    { 
     echo 'Photo URL: ' . $photo_url . '<br />'; 
    } 

    // loop over the photo added dates 
    foreach($story['photo_added_date'] as $photo_added_date) 
    { 
     echo 'Photo Date: ' . $photo_added_date . '<br />'; 
    } 

} 

あなたは再帰的に配列を検索したいしている場合は、他の回答には、何をしたいです。

+0

はい、私は2番目のレベルのループ – vzhen

関連する問題