【问题标题】:PHP Array, Dynamic Array Name or Other TechniquePHP 数组、动态数组名称或其他技术
【发布时间】:2017-04-13 19:27:13
【问题描述】:

我继承了一个项目,我需要将数据添加到以下格式的表中。

Fitness101,FT101,EA101,RX101

我在一个数组中得到以下内容:

Fitness101,FT101
Fitness101,EA101
Fitness101,RX101
Fitness102,FT102
Fitness102,EA102
Fitness102,RX102
Fitness103,FT103
Fitness103,EA103
Fitness103,RX103

我需要对每个健身级别的课程进行分组并添加以下 3 条记录/行:

Fitness101,FT101,EA101,RX101
Fitness102,FT102,EA102,RX102
Fitness103,FT103,EA103,RX103

实现这一目标的最佳方法是什么?

我尝试了几个 if/while/foreach 语句/循环,但都没有成功。

是否可以使用动态数组名称,或者我是否让这变得比必要的更复杂?

谢谢。

如果我打印数组,它看起来像这样:

[0] => Fitness101,FT101
[1] => Fitness101,EA101
[2] => Fitness101,RX101
[4] => Fitness102,FT102
[5] => Fitness102,EA102
[6] => Fitness102,RX102
[7] => Fitness103,EA103
[8] => Fitness103,EA103
[9] => Fitness103,RX103

【问题讨论】:

  • 你是从一个多维数组、一个字符串数组、一个长字符串开始,还是什么?您可以编辑问题以显示您从 PHP 代码开始的内容吗?

标签: php arrays dynamic


【解决方案1】:

对于这种类型的分组问题,您可以将希望分组的列用作结果数组中的键。如果您从这种格式的数组开始:

$your_array = [
    ['Fitness101','FT101'],
    ['Fitness101','EA101'],
    // etc.
];

然后它会像这样工作:

foreach ($your_array as $row) {
    $result[$row[0]][0] = $row[0];  // write or overwrite the first column
    $result[$row[0]][] = $row[1];   // append the subsequent columns
}

这里$row[0] 是包含“Fitness101”等的第一列,当您将其用作$result 数组中的键时,您会将每个值添加到指定行中的列中通过该键,它们将按照您想要的输出组合在一起。


如果你有一个字符串数组,那么它几乎相同,只是先爆炸行。

$your_array = [
    'Fitness101,FT101',
    'Fitness101,EA101',
    // etc.
];

foreach ($your_array as $row) {
    $row = explode(',', $row);
    $result[$row[0]][0] = $row[0];
    $result[$row[0]][] = $row[1];
}

【讨论】:

    【解决方案2】:

    假设您的输入格式如下:

    $entries = [
        "Fitness101,FT101",
        "Fitness101,EA101",
        "Fitness101,RX101",
        "Fitness102,FT102",
        "Fitness102,EA102",
        "Fitness102,RX102",
        "Fitness103,FT103",
        "Fitness103,EA103",
        "Fitness103,RX103"
    ];
    
    $levels = array();
    foreach ($entries as $entry) {
        list($level, $class) = explode(',', $entry);
        if (!isset($levels[$level])) {
            $levels[$level] = $level;
        }
        $levels[$level] .= ','.$class;
    }
    $levels = array_values($levels);
    
    echo json_encode($levels);
    // Prints:
    // ["Fitness101,FT101,EA101,RX101","Fitness102,FT102,EA102,RX102","Fitness103,FT103,EA103,RX103"]
    

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      相关资源
      最近更新 更多