php - 循环遍历二维数组,对列中的值进行更改操作

标签 php algorithm loops design-patterns conditional-statements

循环遍历二维数组(表示表格)时的一个非常常见的问题是只有当列中的值发生变化时才执行操作。举个具体的例子:

从表格数据输出一些 HTML。
给定这张表

category | product
------------------
Vehicles | Bike
Vehicles | Car
Clothes  | Shirt

像这样创建 HTML:

<h1>Vehicles</h1>Bike<br />Car<hr />
<h1>Clothes</h1>Shirt<hr />

为了解决这个问题,我可以这样修改代码:

$current_category = '';
$first = true;
foreach($table as $row){
    if ($row['category'] != $current_category){
        if(!$first){
            // after a group
            $echo '<hr />'; 
        }
        // before a group
        echo '<h1>'.$row['category'].'</h1>';
    } else if (!$first){
        // inside a group
        echo '<br />'; 
    }
    // foreach line
    echo $row['category'];
    $current_category = $row['category'];
    $first = false;
}
// after a group, duplicated code
$echo '<hr />';

我觉得这比必要的更复杂。还有我想在组后执行的代码重复。

这个相对简单的需求的代码已经很复杂了。如果我们需要观察数组中两个变化的列,这几乎是不可能的。

我正在寻找一种解决这个问题的方法,使代码易于阅读,同时能够遍历数组并执行一些代码

  • foreach 行
  • 在一组行之前
  • 在一组行之后
  • 在一组行内

我希望问题很清楚,尽管我很难用简单的术语解释这个普遍的问题。

最佳答案

您可以将产品存储在多个类别中

$categories = [];
foreach ($table as $row) {
  $categories[$row['category']][] = $row['product'];
}

然后直接用内爆输出它们以在每个值之间换行

foreach ($categories as $category => $products) {
  echo '<h1>' . $category . '</h1>';
  echo implode ('<br>', $products);
}

对于一般问题,这将给出如下内容:

$categories = [];
foreach($table as $row) $categories[$row['category']][] = $row;
foreach($categories as $category => $rows){
    // before a group
    echo '<h1>'.$row['category'].'</h1>';
    $first = true;
    foreach($rows as $row){
        if(!$first){
            // inside a group
            echo '<br />';
        }
        // foreach line
        echo $row['category'];
        $first = false;
    }
    // after a group
    $echo '<hr />';
}

关于php - 循环遍历二维数组,对列中的值进行更改操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29303333/

相关文章:

javascript - 如何使用 post (ajax) 执行 IF/ELSE?

algorithm - 如何计算Elo总评分?

c - 转置二维数组

loops - 循环有生命周期是什么意思?

iphone - 在 iOS 上使用显式循环输入和循环输出点循环音频

php - 我无法使用 php 将信息插入 mysql 数据库

javascript - 我似乎无法使这个 if 语句在 Javascript 中工作 :S

python - 对于变量 URL 的循环列表 Python

php - 在特定时间执行查询

string - 存储字符串的内存有效方式