【问题标题】:For loop inside foreach PHP [duplicate]foreach PHP中的for循环[重复]
【发布时间】:2018-12-11 12:26:58
【问题描述】:

我有一个简单的数组,例如:

$array = [val-1, val-2, val-3, val-4, val-5 val-6, etc]

我想通过 foreach 循环传递它,但在该循环内我希望另一个循环将结果按 4 分组。这是为了将它们放入行 div 内的 col-md-3 div 中。请告诉我是否可能以及如何实施。 这就是我想要的:

<div class="row">
    <div class="col-md-3">Value 1</div>
    <div class="col-md-3">Value 2</div>
    <div class="col-md-3">Value 3</div>
    <div class="col-md-3">Value 4</div>
</div>
<div class="row">
    <div class="col-md-3">Value 5</div>
    <div class="col-md-3">Value 6</div>
    <div class="col-md-3">Value 7</div>
    <div class="col-md-3">Value 8</div>
</div>

等等

谢谢。

【问题讨论】:

  • 你试过什么?网上有很多关于这类事情的教程和文档。
  • 1) 有可能。 2) 反复试验。
  • “但在那个循环中,我想要另一个循环将结果按 4 分组” - 不,你不想要第二个循环,因为这对首先。您想使用模运算符来决定何时必须输出必要的 HTML 以关闭一行并打开下一行,在您的单个循环内。 stackoverflow.com/questions/1500675/…
  • SO 的一般规则是您尝试编写代码,如果您的代码没有按照您希望的方式运行,那么您是否会寻求帮助
  • @CBroe,谢谢!这有帮助!

标签: php twitter-bootstrap-3 bootstrap-4


【解决方案1】:

假设您总是有 4 列,您需要对数组进行一些数学运算。像下面这样的东西应该可以工作:

$arr  = [ 'val1', 'val2', 'val3', 'val4', 'val5', 'val6', 'val7', 'val8' ];
$cols = 4;
$rows = ceil( count($arr) / $cols );

for( $r = 0; $r < $rows; $r++ )
{
    echo '<div class="row">';

    for( $c = 0; $c < $cols; $c++ )
    { 
        echo "\n\t".'<div class="col-md-'.(12 / $cols).'">'.$arr[($r * $cols) + $c].'</div>';
    }

    echo "\n".'</div>';
}

此代码产生以下输出:

<div class="row">
    <div class="col-md-3">val1</div>
    <div class="col-md-3">val2</div>
    <div class="col-md-3">val3</div>
    <div class="col-md-3">val4</div>
</div>
<div class="row">
    <div class="col-md-3">val5</div>
    <div class="col-md-3">val6</div>
    <div class="col-md-3">val7</div>
    <div class="col-md-3">val8</div>
</div>

【讨论】:

  • 只需使用array_chunk 来节省您自己计算所有数学的时间。
【解决方案2】:

我能想到的一个解决方案是通过循环手动将数组分成四个组。请看下面的代码:

$array = ['val-1', 'val-2', 'val-3', 'val-4', 'val-5', 'val-6', 'val-7', 'val-8'];
$result = array();
$temp = array();

$i = 1;
foreach ($array as $elem) {
    array_push($temp, $elem);
    if (($i % 4) == 0) {
        array_push($result, $temp);
        $temp = array();
    }
    $i++;
}

echo "<pre>"; print_r($result);

希望这会有所帮助。

【讨论】:

  • 整个解决方案可以在一行代码中完成:array_chunk($array, 4); 提供相同的输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 2013-06-02
  • 2018-05-31
  • 1970-01-01
  • 2012-10-02
相关资源
最近更新 更多