如何相应地对这些数组进行分组?
How to group these arrays accordingly?
我正在使用 PDO 运行 具有 2 个连接的 mysql 查询,这是我从数据库中获得的结果:
Array
(
[0] => Array
(
[id] => 489
[cluster_id] =>
[label_value_id] => 4
[label_id] => 1
[int_value] => 40
)
[1] => Array
(
[id] => 489
[cluster_id] =>
[label_value_id] => 6
[label_id] => 2
[int_value] => 20
)
[2] => Array
(
[id] => 489
[cluster_id] =>
[label_value_id] => 9
[label_id] => 3
[int_value] => 10
)
)
想法是以后会有多个 ID,但为了简单起见,我现在只有 1 个 ID 为 489 的条目。
我需要 3 个数组(连接的原因)是 1 个看起来像这样的数组,我想要一个基于 label-value_id => int_value 关系的子数组:
Array
(
[0] => Array
(
[id] => 489
[cluster_id] =>
[label_value_id] => 4
[label_id] => 1
[int_value] => 40
[vector_data] => Array
(
[4] => 40
[6] => 20
[9] => 10
)
)
)
我宁愿在 PHP 而不是查询中完成此操作,因为当我将其实现到实时应用程序中时我无法控制查询。
非常感谢任何帮助!
您可以使用另一个容器来收集所有共享相同 ID 的批次,使用其密钥来传输它们。在初始化时,为 vector
创建另一个容器,然后将它们推送到任何普通数组值的行:
$result = array();
foreach($array as $values) {
// initialization
if(!isset($result[$values['id']])) {
$result[$values['id']] = $values;
}
$result[$values['id']]['vector_data'][$values['label_value_id']] = $values['int_value'];
}
// $result = array_values($result); // optional key reindex
您可以像这样从数据库处理数组:
$pdo = array(
array(
"id" => 489,
"label_value_id" => 4,
"int_value" => 40,
),
array(
"id" => 489,
"label_value_id" => 6,
"int_value" => 20,
),
array(
"id" => 489,
"label_value_id" => 9,
"int_value" => 10,
),
);
$result = array();
foreach ($pdo as $array) {
if (!isset($result[$array['id']])) {
$result[$array['id']] = array(
"id" => $array['id'],
"vector_data" => array()
);
}
$result[$array['id']]['vector_data'][$array['label_value_id']] = $array['int_value'];
}
我也是这种情况,通过PDO解决了。
Here 个可用示例。我用代码达到了相同的结果:
$sth->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP);
觉得你应该试试...
我正在使用 PDO 运行 具有 2 个连接的 mysql 查询,这是我从数据库中获得的结果:
Array
(
[0] => Array
(
[id] => 489
[cluster_id] =>
[label_value_id] => 4
[label_id] => 1
[int_value] => 40
)
[1] => Array
(
[id] => 489
[cluster_id] =>
[label_value_id] => 6
[label_id] => 2
[int_value] => 20
)
[2] => Array
(
[id] => 489
[cluster_id] =>
[label_value_id] => 9
[label_id] => 3
[int_value] => 10
)
)
想法是以后会有多个 ID,但为了简单起见,我现在只有 1 个 ID 为 489 的条目。
我需要 3 个数组(连接的原因)是 1 个看起来像这样的数组,我想要一个基于 label-value_id => int_value 关系的子数组:
Array
(
[0] => Array
(
[id] => 489
[cluster_id] =>
[label_value_id] => 4
[label_id] => 1
[int_value] => 40
[vector_data] => Array
(
[4] => 40
[6] => 20
[9] => 10
)
)
)
我宁愿在 PHP 而不是查询中完成此操作,因为当我将其实现到实时应用程序中时我无法控制查询。
非常感谢任何帮助!
您可以使用另一个容器来收集所有共享相同 ID 的批次,使用其密钥来传输它们。在初始化时,为 vector
创建另一个容器,然后将它们推送到任何普通数组值的行:
$result = array();
foreach($array as $values) {
// initialization
if(!isset($result[$values['id']])) {
$result[$values['id']] = $values;
}
$result[$values['id']]['vector_data'][$values['label_value_id']] = $values['int_value'];
}
// $result = array_values($result); // optional key reindex
您可以像这样从数据库处理数组:
$pdo = array(
array(
"id" => 489,
"label_value_id" => 4,
"int_value" => 40,
),
array(
"id" => 489,
"label_value_id" => 6,
"int_value" => 20,
),
array(
"id" => 489,
"label_value_id" => 9,
"int_value" => 10,
),
);
$result = array();
foreach ($pdo as $array) {
if (!isset($result[$array['id']])) {
$result[$array['id']] = array(
"id" => $array['id'],
"vector_data" => array()
);
}
$result[$array['id']]['vector_data'][$array['label_value_id']] = $array['int_value'];
}
我也是这种情况,通过PDO解决了。 Here 个可用示例。我用代码达到了相同的结果:
$sth->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_GROUP);
觉得你应该试试...