按列值对行进行分组,并在分组时以不同方式处理某些行
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_name
和 column_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));
我有这个输入数据:
$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_name
和 column_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));