gpt4 book ai didi

php - 将带连接的 Mysql select 语句转换为多维数组

转载 作者:行者123 更新时间:2023-11-29 10:52:10 24 4
gpt4 key购买 nike

我似乎找不到执行以下操作的正确方法:

我正在从*具有连接的表中选择值,比方说:

SELECT templates.id as templates-id, template_fields.id as template_fields-id FROM templates JOIN template_fields ON templates.id = template_fields.template_id.

我得到的结果如下:

Array
(
[0] => Array
(
[template_id] => 1
[template_field_id] => 20
)

[1] => Array
(
[template_id] => 1
[template_field_id] => 21
)

[2] => Array
(
[template_id] => 2
[template_field_id] => 22
)

[3] => Array
(
[template_id] => 2
[template_field_id] => 23
)

)

但我需要这样的东西:

Array
(
[0] => Array
(
[id] => 1
[template_fields] => Array
(
[0] => Array
(
[id] => 20
)

[1] => Array
(
[id] => 21
)

)

)

[1] => Array
(
[id] => 2
[template_fields] => Array
(
[0] => Array
(
[id] => 22
)

[1] => Array
(
[id] => 23
)

)

)

)

负责构建这些查询的类会记住连接的顺序。列别名(templates、template_fields)中的第一个参数可用于知道哪一个必须是子数组。

以下是该类的使用方式:

$result = $database->select('templates')->join('templatesfields')->getResult()->formattedOutput('');

格式化输出是这样的:

$formattedArray = array();

foreach ($this->result as $row)
{
$ids = array();
$tempColumnValuesArray = array();

foreach ($row as $columnKey => $value)
{
$columnKeyExploded = explode('-', $columnKey);
$columnTable = $columnKeyExploded[0];
$columnColumnName = $columnKeyExploded[1];

if (!isset($formattedArray[$columnTable]))
{
$formattedArray[$columnTable] = array();
}

if ($columnColumnName === 'id' && !isset($formattedArray[$columnTable][$value]))
{
$formattedArray[$columnTable][$value] = array();
$ids[$columnTable] = $value;
}

if (!isset($ids[$columnTable]))
{
$tempColumnValuesArray[$columnColumnName] = $value;
}
else
{
if ($tempColumnValuesArray)
{
array_merge($formattedArray[$columnTable][$ids[$columnTable]], $tempColumnValuesArray);
$tempColumnValuesArray = array();
}

$formattedArray[$columnTable][$ids[$columnTable]][$columnColumnName] = $value;
}

}
}

foreach ($formattedArray as $tableName => $rows)
{
/**
* TEMP TEMP TEMP TEMP TEMP TEMP TEMP TEMP TEMP
*/

if ($tableName == 'templates')
{
continue;
}
else
{
foreach ($rows as $row)
{
$formattedArray['templates'][$row['template_id']]['templates_fields'][] = $row;
}
}
}

return $formattedArray;

但是这个函数不能使用静态参数...

有什么方法可以将这个平面数组转换为像给定示例一样的多维数组吗?

非常感谢!

最佳答案

$arr = Array
(
0 => Array
(
'template_id' => 1,
'template_field_id' => 20
),

1 => Array
(
'template_id' => 1,
'template_field_id' => 21
),

2 => Array
(
'template_id' => 2,
'template_field_id' => 22
),

3 => Array
(
'template_id' => 2,
'template_field_id' => 23
)

);

$newarr = array();
foreach($arr as $key=>$val){
$newarr[$val['template_id']][] = $val;
}

$i=0;
foreach($newarr as $k=>$v){
foreach($v as $m){
$newarr1[$i]['id']= $m['template_id'];
$newarr1[$i]['template_field_id'][]['id']= $m['template_field_id'];
}
$i++;
}
echo "<pre>"; print_r($newarr1);

Demo

关于php - 将带连接的 Mysql select 语句转换为多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43522833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com