【问题标题】:Loop through array of arrays and display each sub-array in sequence遍历数组数组并按顺序显示每个子数组
【发布时间】:2016-01-28 07:45:47
【问题描述】:

我有一个包含 3 个不同数组的数组。

$arrayAll = (

    0 => $array1,
    1 => $array2,
    2 => $array3
);

如何遍历 $arrayAll,在每次迭代时显示每个子数组的第一个元素(array1,array2,array3)?

所以,输出将是:

$array1[0],$array2[0],$array3[0],
$array1[1],$array2[1],$array3[1],
$array1[2],$array2[2],$array3[2]

以此类推..直到所有子元素都被获取。

编辑:

$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 loops multidimensional-array foreach


【解决方案1】:
$maxLength = 0;

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

for($i=0; $i<$maxLength; $i++)
{
    foreach($arrayAll as $value)
    {
        if(isset($value[$i]))
        {
            echo $value[$i];    
        }

    }
}

【讨论】:

  • 谢谢。 array1,array2,array3 中的每一个都需要不同的 HTML 模板,所以在 foreach($arrayAll as $value){} 里面我添加了 if ($value == array1){//使用模板 1}elseif(//使用模板 2 ) 等.. 效果很好并拉出正确的模板但是我在迭代 $value[$i] 时遇到了困难。它包含许多必须提取的数据项。我试过 foreach($value[$i] as $dataItem){}。但是,这会产生错误。如果你明白我的意思吗?
  • 你能用你的数组更新你的答案吗?它是一个关联数组吗?目的?澄清一下,我会帮你的
  • 基本上我不能只回显 $value[$i] 这是它自己的一个数组,所以我需要以某种方式迭代它并且 foreach 不起作用,也许我没有结构化合适吗?
  • 像这样创建一个关联数组:array('name'=>'valueofname', 'age'=>'valueOfAge'),一旦你遍历它们,你就可以使用 $value[$ i]['name'] 例如
  • 根据您的回答编辑了帖子,因此您可以看到问题在于访问 $value[$i] 的内容并显示它
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多