【问题标题】:Displaying array contents in pairs成对显示数组内容
【发布时间】:2020-10-25 10:43:04
【问题描述】:

我正在尝试创建一个显示所有用户个人资料的网站。我想将每两个用户包装在一个<div> 中,直到没有剩余。假设我们有 19 个数组,由 $info 中的 userprofileinfo 组成——下面的代码可以正常工作,但会将第 20 个打印为空 div,我想防止这种情况发生。在这里做什么?

$info = mysqli_fetch_all($result, MYSQLI_ASSOC);

for ($count = 0; $count <= mysqli_num_rows($result) - 1; $count += 2) {
    echo <div class="row">
    echo "<div>".print_r($info[$count])."</div>";
    echo "<div>".print_r($info[$count+1])."</div>";¨
    echo </div>
}   

【问题讨论】:

  • 我知道 echo 语句本身可能看起来很奇怪,在 div 中发布数组,但目的是表明我不希望显示一个空的
  • 用一个简单的if 来检查$count + 1 索引是否存在有什么问题?虽然你对两个回声都做同样的事情,但我不确定你为什么不一个一个地做而不是 count+2。另外,记得关闭你的结束 div 标签。
  • 我可以 - 这似乎不是一个简洁的解决方案..
  • 我不确定你能得到比“if this do x else y”更简洁多少:P
  • 你是对的......只是认为有一种更好的解决方案,它带有一个我可能不知道的循环。感谢您的帮助,我会这样做的!

标签: php arrays loops


【解决方案1】:

我想你可能想多了。为什么不直接使用array_chunk()

$info = mysqli_fetch_all($result, MYSQLI_ASSOC);

foreach (array_chunk($info, 2) as $chunk) {
    echo '<div class="row">';
    foreach ($chunk as $element) {
        echo "<div>".$element['name']."</div>";
    }
    echo '</div>';
}

array_chunk() 的工作方式是将数组元素分组为给定大小的块。你可以有一个双循环。内部循环将遍历每个块并显示两个元素。

【讨论】:

    【解决方案2】:

    只是为了使用 OP 更新代码(具有固定引号)提供 Yvan1263 答案的稍微干净的版本。

    $info = mysqli_fetch_all($result, MYSQLI_ASSOC);
    
    for ($count = 0; $count <= count($info) - 1; $count += 2) {
        echo '<div class="row">';
        echo "<div>".print_r($info[$count])."</div>";
        if (isset($info[$count+1])) {
            echo "<div>".print_r($info[$count+1])."</div>";
        }
        echo </div>
    }   
    

    【讨论】:

    • 使用 mysqli num rows 绝对在这里毫无意义。
    • @YourCommonSense 当然可以,但它是 OP 提供给我们的代码的一部分,与问题无关?我的意思是,如果这是投反对票的人的原因,我看不出它是如何使答案“没有帮助”的。
    【解决方案3】:

    你可以这样做:

    $info = mysqli_fetch_all($result, MYSQLI_ASSOC);
    
    for ($count = 0; $count <= mysqli_num_rows($result); $count += 2) {
        if($count+1 >= mysqli_num_rows($result)) {
            /* IF MAX IS MORE THAN ENTRIES NUMBER */
            echo "<div>".print_r($info[$count])."</div";
        }
        else {
            echo "<div>".print_r($info[$count])."</div";
            echo "<div>".print_r($info[$count+1])."</div";
        }
    }   
    

    注意:使用 PDO 代替 MySQLi。

    【讨论】:

    • 我想把每两个用户分成一个
      ,所以这个解决方案行不通
    • 编辑过于复杂。 OP 总是想做第一个,所以不需要单独的 if。
    • @Jonnix :如果需要,您可以编辑我的帖子以实施您的答案。
    • @Yvan1263 那么这将是我的答案,而不是你的;)
    • 我明白你的意思 Jonnix。所以添加一个 if 语句来检查 $count + 1 是否存在,如果不存在(否则),只打印一个。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签