按列值对行进行分组,并在分组时以不同方式处理某些行

Group rows by column value and handle some rows differently while grouping

我有这个输入数据:

$tbldocumentacao_eleitoral_answers = array(
  array('id' => '1', 'sequence_answer_id' => '4', 'column_name' => 'form_id', 'column_value' => '3'),
  array('id' => '2', 'sequence_answer_id' => '4', 'column_name' => 'text-1625344899360', 'column_value' => '1000'),
  array('id' => '3', 'sequence_answer_id' => '4', 'column_name' => 'text-1625346513466', 'column_value' => 'Text 2'),
  array('id' => '4', 'sequence_answer_id' => '4', 'column_name' => 'text-1625346520950', 'column_value' => 'Text 3'),
  array('id' => '5', 'sequence_answer_id' => '4', 'column_name' => 'text-1625346541360', 'column_value' => 'VALUE ANY'),
  array('id' => '9', 'sequence_answer_id' => '5', 'column_name' => 'form_id', 'column_value' => '3'),
  array('id' => '10', 'sequence_answer_id' => '5', 'column_name' => 'text-1625344899360', 'column_value' => '1080'),
  array('id' => '11', 'sequence_answer_id' => '5', 'column_name' => 'text-1625346513466', 'column_value' => 'VALUE Any'),
  array('id' => '12', 'sequence_answer_id' => '5', 'column_name' => 'text-1625346520950', 'column_value' => 'taffarelxavier7@gmail.com'),
  array('id' => '13', 'sequence_answer_id' => '5', 'column_name' => 'text-1625346541360', 'column_value' => '63999480630'),
  array('id' => '17', 'sequence_answer_id' => '6', 'column_name' => 'form_id', 'column_value' => '3'),
  array('id' => '18', 'sequence_answer_id' => '6', 'column_name' => 'text-1625344899360', 'column_value' => '7895'),
  array('id' => '19', 'sequence_answer_id' => '6', 'column_name' => 'text-1625346513466', 'column_value' => 'IARA'),
  array('id' => '20', 'sequence_answer_id' => '6', 'column_name' => 'text-1625346520950', 'column_value' => 'taffa@gmail.com'),
  array('id' => '21', 'sequence_answer_id' => '6', 'column_name' => 'text-1625346541360', 'column_value' => '63999484570'),
);

我一直在尝试解决这个问题,但没有成功。我的代码:

$result = [];

foreach ($tbldocumentacao_eleitoral_answers as $key => $value) {
  $result[$value['sequence_answer_id']][] = [$value['column_name']=>$value['column_name']];
}

var_dump($result);

预期结果

Array
(
    [0] => Array
        (
            [sequence_answer_id] => 4
            [text-1625344899360] => 1000
            [text-1625346513466] => Text 2
            [text-1625346520950] => Text 3
            [text-1625346541360] => VALUE ANY
        )
    [1] => Array
        (
            [sequence_answer_id] => 5
            [text-1625344899360] => 1080
            [text-1625346513466] => VALUE Any
            [text-1625346520950] => taffarelxavier7@gmail.com
            [text-1625346541360] => 63999480630
        )
    [2] => Array
        (
            [sequence_answer_id] => 6
            [text-1625344899360] => 7895
            [text-1625346513466] => IARA
            [text-1625346520950] => taffa@gmail.com
            [text-1625346541360] => 63999484570
        )
)

将您的代码更改为:

foreach ($tbldocumentacao_eleitoral_answers as $key => $value) {
  $result[$value['sequence_answer_id']][$value['column_name']] = $value['column_value'];
}

你最常使用$value['column_name']作为key

在您的代码中,您将数组添加到新数组中

您可以使用临时键,然后在循环结束时重新索引结果。

有条件地,在 column_name 元素中迭代具有 form_id 值的行时,在分组行中声明 sequence_answer_id 元素。否则,将 column_namecolumn_value 存储在分组行中。

代码:(Demo)

$result = [];
foreach ($tbldocumentacao_eleitoral_answers as $row) {
    if ($row['column_name'] === 'form_id') {
        $result[$row['sequence_answer_id']]['sequence_answer_id'] = $row['sequence_answer_id'];
    } else {
        $result[$row['sequence_answer_id']][$row['column_name']] = $row['column_value'];
    }
}

var_export(array_values($result));