Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过嵌套数组进行解析,并使用父id将其保存在mysql数据库中_Php_Multidimensional Array_Laravel 5.6 - Fatal编程技术网

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
是同一表格中其他行的id
id
。@MickaelLeger,更新了文档,因此
parent\u id
对于每个
根父级
都将为0,并且子级应将父级的
id
作为
parent\u id
。我不知道这样做是否是一种好的做法(如果删除父项,需要删除所有子项,会发生什么情况?),但一种方法是使用递归函数,可能是在存储最后一个
插入id
的位置,然后使用它?你用的是PDO吗?不。我用的是Laravel Eloquent。答案很好,但我认为在一次调用后递归函数会忘记主嵌套数组。我的意思是它将运行一个完整的级别,但不是所有级别,如果我错了,请纠正我。只要有儿童财产,它将继续深入。@Shashikummarisal,你认为它为什么会忘记?
$data
$row
都是函数执行上下文的本地。他们没有被遗忘。