【问题标题】:Iterating over array of arrays and presenting the results遍历数组数组并显示结果
【发布时间】:2015-10-28 16:09:45
【问题描述】:

如何访问数组 $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
            }

        }

    }
}

【问题讨论】:

    标签: php arrays foreach


    【解决方案1】:

    你在这里处理的是一个关联数组,你可以这样访问它:

    <?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
            }
    
        }
    
    }
    }
    

    【讨论】:

    • 我之前尝试过,但我使用了 $data = $value[$i];它在 3 元素之后永远循环。可能与子数组的长度不等有关?
    • 不,它不应该永远循环,它会在元素加载后停止。您想正确加载所有内容吗?
    【解决方案2】:

    您不需要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';
              }
    

    【讨论】:

    • 试过了。它开始很好,然后永远循环在同一个 $sharedArticlesContent 项目上......
    • 我不太了解您的数据结构。您能否更新问题以显示 $contentArray 和 SharedArticlesContent 中的内容?
    • 还有你试图从中获得的输出。我不明白您所说的“显示每个子数组中的一项”是什么意思,因为您有一个从 0 到 $maxLength 的循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    相关资源
    最近更新 更多