2015-10-28 3 views
0

Как получить доступ к содержимому $ value [$ i], который является массивом. Не повезло использовать foreach в приведенной ниже форме.Итерация по массиву массивов и представление результатов

Идея состоит в том, чтобы пересечь $ contentArray и отображать по одному элементу из каждого подматрица на каждой итерации.

$addsContent = $Adds->selectAdds(10); 
$sharedArticlesContent = $SharedContent->getSharedContent($topic_selected, $filter_selected); 
$blogPostsContent = $BlogPosts->getRecentBlogPostsByTopic("business"); 

$contentArray = array(

    $sharedArticlesContent, 
    $addsContent , 
    $blogPostsContent 
); 


foreach($contentArray as $value) 
    { 
     if(count($value)>$maxLength) 
     { 
      $maxLength = count($value); 
     } 
    } 

for($i=0; $i<$maxLength; $i++) 
{ 
    foreach($contentArray as $value) 
    { 
     if(isset($value[$i])) 
     { 
      if($value==$sharedArticlesContent){ 
       $data = $value[$i]; 
       foreach($sharedArticlesContent as $data){ 

        $post_id = $data['id']; 
        $uploaded_by = $data['uploaded_by']; 
        $text = $data['text']; 
        $image = $data['image']; 

        require 'template1.php'; 

       } 
      }elseif($value==$addsContent){ 
       //template2 
      }else{ 
       //template3 
      } 

     } 

    } 
} 

ответ

0

Вы имеете дело с ассоциативным массивом здесь, вы можете получить доступ к нему так:

<?php 

$addsContent = $Adds->selectAdds(10); 
$sharedArticlesContent = $SharedContent->getSharedContent($topic_selected, $filter_selected); 
$blogPostsContent = $BlogPosts->getRecentBlogPostsByTopic("business"); 

$contentArray = array(

$sharedArticlesContent, 
$addsContent , 
$blogPostsContent 
); 


foreach($contentArray as $value) 
{ 
    if(count($value)>$maxLength) 
    { 
     $maxLength = count($value); 
    } 
} 

for($i=0; $i<$maxLength; $i++) 
{ 
foreach($contentArray as $value) 
{ 
    if(isset($value[$i])) 
    { 
     if($value==$sharedArticlesContent) 
     { 
      $post_id = $value[$i]['id']; 
      $uploaded_by = $value[$i]['uploaded_by']; 
      $text = $value[$i]['text']; 
      $image = $value[$i]['image']; 

      require 'template1.php'; 
     } 
     elseif($value==$addsContent) 
     { 
      //template2 
     } 
     else 
     { 
      //template3 
     } 

    } 

} 
} 
+0

Я пробовал это раньше, но вместо этого использовал $ data = $ value [$ i]; Он петляет навсегда, после 3-х элементов. Может быть, это связано с неравной длиной суб-массивов? – user3857924

+0

Nop, он не должен зацикливаться навсегда, он остановится после загрузки элементов. Вы хотите загрузить все правильно? –

0

Вам не нужно foreach. $data - ассоциативный массив, вам не нужно его перебирать.

 if($value==$sharedArticlesContent){ 
      $data = $value[$i]; 
      $post_id = $data['id']; 
      $uploaded_by = $data['uploaded_by']; 
      $text = $data['text']; 
      $image = $data['image']; 

      require 'template1.php'; 
      } 
+0

Пробовал, что. Он начинается хорошо, а затем петляет над тем же элементом $ sharedArticlesContent навсегда ....... – user3857924

+0

Я не совсем понимаю ваши структуры данных. Не могли бы вы обновить вопрос, чтобы показать, что находится в '$ contentArray' и' SharedArticlesContent'? – Barmar

+0

А также результат, который вы пытаетесь получить от этого. Я не понимаю, что вы подразумеваете под «отображением одного элемента из каждого подматрица», поскольку у вас есть цикл от «0» до «$ maxLength». – Barmar

Смежные вопросы