首先,我使用的是 Laravel 5.1(PHP 框架)并且我正在运行 PHP 5.6.4,而我面临的问题实际上与递归有关。
我目前的种子文件是(递归函数的借口很糟糕):
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Migrations\Migration;
use eCommerce\Category;
class CategoryCategorySeeder extends Seeder
{
protected $addressHolder;
public function __construct() {
$this->addressHolder = array();
}
private function recursive($array, $depth=0) {
echo $depth."\n";
foreach($array as $category){
// print_r( $category['category_id'] );
if( isset( $category['sub_categories'] ) ){
$this->recursive($category['sub_categories'], $depth++);
} else {
}
}
}
public function run()
{
DB::table('category_category')->delete();
$categories = [
[
'category_id' => 2,
'sub_categories' => [
[
'category_id' => 3,
'sub_categories' => [
[
'category_id' => 6
],[
'category_id' => 7
],[
'category_id' => 8
],[
'category_id' => 9
],[
'category_id' => 10
],[
'category_id' => 11
],[
'category_id' => 12
],[
'category_id' => 13
],[
'category_id' => 14
],[
'category_id' => 15
]
]
],[
'category_id' => 4,
'sub_categories' => [
[
'category_id' => 18
],[
'category_id' => 19
],[
'category_id' => 20
],[
'category_id' => 21
],[
'category_id' => 22
],[
'category_id' => 23
],[
'category_id' => 24
],[
'category_id' => 25
],[
'category_id' => 26
],[
'category_id' => 27
],[
'category_id' => 28
],[
'category_id' => 29
],[
'category_id' => 30
],[
'category_id' => 31
],[
'category_id' => 32
]
]
],[
'category_id' => 5,
'sub_categories' => [
[
'category_id' => 16
],[
'category_id' => 17
]
]
]
]
],[
'category_id' => 33,
'sub_categories' => [
[
'category_id' => 34
],[
'category_id' => 35
],[
'category_id' => 36,
'sub_categories' => [
[
'category_id' => 37
],[
'category_id' => 38
],[
'category_id' => 39
],[
'category_id' => 40
],[
'category_id' => 41
],[
'category_id' => 42
],[
'category_id' => 43
],[
'category_id' => 44
],[
'category_id' => 45
]
]
]
]
],[
'category_id' => 46,
'sub_categories' => [
[
'category_id' => 50
],[
'category_id' => 51,
'sub_categories' => [
[
'category_id' => 54
],[
'category_id' => 55
],[
'category_id' => 56
],[
'category_id' => 57
]
]
],[
'category_id' => 52
],[
'category_id' => 53
],[
'category_id' => 137
]
]
],[
'category_id' => 47,
'sub_categories' => [
[
'category_id' => 58
],[
'category_id' => 59
],[
'category_id' => 60
],[
'category_id' => 61
],[
'category_id' => 62
],[
'category_id' => 63
],[
'category_id' => 64
],[
'category_id' => 65
],[
'category_id' => 66
],[
'category_id' => 67
],[
'category_id' => 68
],[
'category_id' => 69
],[
'category_id' => 70
],[
'category_id' => 71
],[
'category_id' => 72
]
]
],[
'category_id' => 48,
'sub_categories' => [
[
'category_id' => 73,
'sub_categories' => [
[
'category_id' => 78
],[
'category_id' => 79
]
]
],[
'category_id' => 74,
'sub_categories' => [
[
'category_id' => 80
],[
'category_id' => 81
],[
'category_id' => 82
],[
'category_id' => 83
]
]
],[
'category_id' => 75,
'sub_categories' => [
[
'category_id' => 84
],
[
'category_id' => 85
],
[
'category_id' => 86
]
]
],[
'category_id' => 76,
'sub_categories' => [
[
'category_id' => 87
],[
'category_id' => 88,
'sub_categories' => [
[
'category_id' => 93
],[
'category_id' => 94
],[
'category_id' => 95
]
]
],[
'category_id' => 89
],[
'category_id' => 90
],[
'category_id' => 91
],[
'category_id' => 92
]
]
],[
'category_id' => 77
]
]
],[
'category_id' => 49,
'sub_categories' => [
[
'category_id' => 96
],[
'category_id' => 97
],[
'category_id' => 98
],[
'category_id' => 99
],[
'category_id' => 100
],[
'category_id' => 135
],[
'category_id' => 136
],[
'category_id' => 138
],[
'category_id' => 139
],[
'category_id' => 140
]
]
],[
'category_id' => 134,
'sub_categories' => [
[
'category_id' => 101,
'sub_categories' => [
[
'category_id' => 108
],[
'category_id' => 109
],[
'category_id' => 110
]
]
],[
'category_id' => 102,
'sub_categories' => [
[
'category_id' => 111
],[
'category_id' => 112
],[
'category_id' => 113
]
]
],[
'category_id' => 103,
'sub_categories' => [
[
'category_id' => 114
],[
'category_id' => 115
],[
'category_id' => 116
],[
'category_id' => 117
],[
'category_id' => 118
]
]
],[
'category_id' => 104
],[
'category_id' => 105
],[
'category_id' => 106,
'sub_categories' => [
[
'category_id' => 119
],[
'category_id' => 120
],[
'category_id' => 121
],[
'category_id' => 122
],[
'category_id' => 123
],[
'category_id' => 124
],[
'category_id' => 125
],[
'category_id' => 126
],[
'category_id' => 127
]
]
],[
'category_id' => 107
]
]
],[
'category_id' => 128,
'sub_categories' => [
[
'category_id' => 129
],[
'category_id' => 130
],[
'category_id' => 131
],[
'category_id' => 132
],[
'category_id' => 133
]
]
],[
'category_id' => 134
],[
'category_id' => 141,
'sub_categories' => [
[
'category_id' => 142
]
]
]
];
$this->recursive($categories);
}
}
我想递归地遍历每个“类别”(大型多维数组)并制作一个“地址”,这是该类别在类别层次结构中的来源,这是因为在我的网站上,一个类别可以属于许多其他类别。
这个种子类如果为多对多关系Category 的数据透视表有。
在数据透视表中,我有:
- category_id - 整数
- parent_category_id - 整数
- 地址 - 字符串
所以一个例子可以是(代码中的数组也是如此):
- 6
- 3
- “2-3-6”
所以“2-3-6”是该类别 6 的特定实例的层次结构中的完整“地址”。
那么如何递归读取我的类别数组并在我的数据透视表中为每个字段输入上述三个字段?