Php 通过嵌套数组进行解析,并使用父id将其保存在mysql数据库中
我有一个嵌套数组,如下所示:-Php 通过嵌套数组进行解析,并使用父id将其保存在mysql数据库中,php,multidimensional-array,laravel-5.6,Php,Multidimensional Array,Laravel 5.6,我有一个嵌套数组,如下所示:- array( array( 'id' => 45cfeteuid536hjj929, 'name' = 'Cuisines', 'children' => array( array( 'id' => 45gcfeteuid536hjj929, 'name' = 'Itlaian',
array(
array(
'id' => 45cfeteuid536hjj929,
'name' = 'Cuisines',
'children' => array(
array(
'id' => 45gcfeteuid536hjj929,
'name' = 'Itlaian',
),
array(
'id' => 45bjfe78ng5d536hjj92,
'name' = 'Indian',
'children' => array(
array(
'id' => 457hfe78ng5d53ghy56j,
'name' = 'Punjabi'
)
)
)
)
)
);
我有一张这样的桌子:-
|--------------------------------|
| id | name | parent_id |
|--------------------------------|
|---------------------------------------------------------------|
| id | name | parent_id | api_id |
|---------------------------------------------------------------|
| 1 | Cuisines | 0 | 45cfeteuid536hjj929 |
|---------------------------------------------------------------|
| 2 | Italian | 1 | 45gcfeteuid536hjj929 |
|---------------------------------------------------------------|
| 3 | Indian | 1 | 45bjfe78ng5d536hjj92 |
|---------------------------------------------------------------|
| 4 | Punjabi | 3 | 457hfe78ng5d53ghy56j |
|---------------------------------------------------------------|
我希望像这样插入数据:-
|--------------------------------|
| id | name | parent_id |
|--------------------------------|
|---------------------------------------------------------------|
| id | name | parent_id | api_id |
|---------------------------------------------------------------|
| 1 | Cuisines | 0 | 45cfeteuid536hjj929 |
|---------------------------------------------------------------|
| 2 | Italian | 1 | 45gcfeteuid536hjj929 |
|---------------------------------------------------------------|
| 3 | Indian | 1 | 45bjfe78ng5d536hjj92 |
|---------------------------------------------------------------|
| 4 | Punjabi | 3 | 457hfe78ng5d53ghy56j |
|---------------------------------------------------------------|
子对象的父对象id是它所属对象的id。表的id是mysql数据库自动生成的自动增量值
例如:-
- 步骤1:保存烹饪时,保存id(自然自动递增) 是1。因为它是根,所以父\u id=0李>
- 步骤2:保存意大利语时,id(自然自动递增) 保存的是1。由于它是菜系的一个子类,因此父类id=1
如何以这种方式保存嵌套数组?一种方法是生成如下所示的
insert
语句(假设您的表名为tab
):
插入选项卡(名称、父项id、应用程序id)
从选项卡中选择“菜系”,合并(最小(id),0),“45cfeteuid536hjj929”
其中app_id=“”;
插入选项卡(名称、父项id、应用程序id)
从选项卡中选择“Itlaian”,合并(最小值(id),0),“45gcfeteuid536hjj929”
其中app_id='45cfetuid536hj929';
插入选项卡(名称、父项id、应用程序id)
从选项卡中选择“印度”,合并(最小值(id),0),“45BJFE78NG5D536HJ92”
其中app_id='45cfetuid536hj929';
插入选项卡(名称、父项id、应用程序id)
从选项卡中选择“旁遮普”,合并(最小值(id),0),“457hfe78ng5d53ghy56j”
其中app_id='45bjfe78ng5d536hj92';
这些查询将通过父项应具有的app\u ID
查找父项ID。由于假定数据库将在插入时生成,id
列的值不会被插入
下面是生成这些语句的递归PHP函数。您必须对其进行调整,以使用您使用的任何API(PDO、mysqli等)实际执行这些语句:
假设嵌套数据结构存储在变量$data
中,则按如下方式调用上述函数:
insertRecords($data);
请分享您的尝试?我不确定是否理解:
parent\u id
是同一表格中其他行的idid
。@MickaelLeger,更新了文档,因此parent\u id
对于每个根父级
都将为0,并且子级应将父级的id
作为parent\u id
。我不知道这样做是否是一种好的做法(如果删除父项,需要删除所有子项,会发生什么情况?),但一种方法是使用递归函数,可能是在存储最后一个插入id
的位置,然后使用它?你用的是PDO吗?不。我用的是Laravel Eloquent。答案很好,但我认为在一次调用后递归函数会忘记主嵌套数组。我的意思是它将运行一个完整的级别,但不是所有级别,如果我错了,请纠正我。只要有儿童财产,它将继续深入。@Shashikummarisal,你认为它为什么会忘记?$data
和$row
都是函数执行上下文的本地。他们没有被遗忘。