我有一个csv文件,其中包含带有逗号分隔格式的类别树的字段,如下所示:
MotherCategory, ChildCategory1, ChildCategory2, ecc.
有些记录仅包含一个类别,另一些包含两个,其他包含三个或更多。
我希望能够在数据库中存储所有唯一类别,并使用
parentid
方案组织每条记录,其中parentid
值是上一级类别的id
。最后,我应该有以下内容:
id: 1, catname: MotherCategory, parentid: NULL
id: 2, catname: ChildCategory1, parentid: 1
id: 3, catname: ChildCategory2, parentid: 2
我已经过滤了数据,并使用
array_unique()
删除了重复项,接下来使用explode()
能够分离值,并且我在对值进行计数并根据结果数组的长度分离组以构建树,但是我认为目前我缺少一些可以得到最终结果的东西。我有以下代码。有人可以给我提示解决问题吗?
$cats = array_of_comma_separated_values;
foreach ($cats as $cat) {
$catarray[] = explode(",",$cat);
}
//first level
$level1 = array_filter ($catarray, function($item) {
if (count($item) == 1) { return true; } return false;
});
//second level
$level2 = array_filter ($catarray, function($item) {
if (count($item) == 2) { return true; } return false;
});
$level3 = array_filter ($catarray, function($item) {
if (count($item) == 3) { return true; } return false;
});
$level4 = array_filter ($catarray, function($item) {
if (count($item) == 4) { return true; } return false;
});
$level5 = array_filter ($catarray, function($item) {
if (count($item) == 5) { return true; } return false;
});
$level6 = array_filter ($catarray, function($item) {
if (count($item) == 6) { return true; } return false;
});
$level7 = array_filter ($catarray, function($item) {
if (count($item) == 7) { return true; } return false;
});
这给了我一些要迭代才能实现我要寻找的数组。
现在,由于Kovlar的建议,我正在基于
array_pop()
和array_replace_recurive()
进行开发。我编辑了该帖子,因为可能我不太清楚。
最佳答案
我建议使用array_replace_recursive()
来简化树合并:)
// $tree will contain the tree at the end of the script
$tree = [];
// we treat each row of the csv one by one
foreach($csv_rows as $row) {
// first, we split the string into an array
$root_to_leaf = explode(',', $row['root_to_leaf']);
// this is the "leaf" we want to append to the tree
$leaf = [array_pop($root_to_leaf) => $row['value']];
// we rebuild the path from the leaf to the root
while(!empty($root_to_leaf)) {
// add the next branching toward the root
$leaf = [array_pop($root_to_leaf) => $leaf];
}
// we append the leaf to the tree
$tree = array_replace_recursive($tree, $leaf);
}
关于php - 在PHP的树中转换带有逗号分隔值的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37596339/