Php 从包含父分隔符和子分隔符的字符串创建数组

Php 从包含父分隔符和子分隔符的字符串创建数组,php,arrays,Php,Arrays,我试图找出如何将这个字符串转换为数组,同时又不重复父键。父分隔符为|,子分隔符为> 示例字符串:进步主义与第一次世界大战>性别与平等|进步主义与第一次世界大战>社会变革与改革|大萧条与新政 在上面的例子中,进步主义和第一次世界大战有两个孩子,即:两性平等和社会变革与改革 最终结果应该是: [0] => [ 'name' => 'Progressivism and World War 1' 'parent' => false ], [1] => [ 'nam

我试图找出如何将这个字符串转换为数组,同时又不重复父键。父分隔符为|,子分隔符为>

示例字符串:进步主义与第一次世界大战>性别与平等|进步主义与第一次世界大战>社会变革与改革|大萧条与新政

在上面的例子中,进步主义和第一次世界大战有两个孩子,即:两性平等和社会变革与改革

最终结果应该是:

[0] => [
  'name'   => 'Progressivism and World War 1'
  'parent' => false
],
[1] => [
  'name' => 'Gender and Equality'
  'parent' => 'Progressivism and World War 1'
],
[2] => [
  'name' => 'Social Change and Reform'
  'parent' => 'Progressivism and World War 1'
],
[3] => [
  'name' => 'The Great Depression and the New Deal'
  'parent' => false
],

首先,必须将字符串拆分为多个部分,以获得构建数组所需的不同部分。您可以在PHP中使用字符串删除器、字符串输入来实现这一点

然后,在它们之间循环并再次执行相同的操作。在添加到数组之前,请检查是否存在父级,如果没有,请将父级设置为false

这就是我提出的解决方案:

<?php

$input = "Progressivism and World War 1>Gender and Equality|Progressivism and World War 1>Social Change and Reform|The Great Depression and the New Deal";
$result = [];

$parents = explode('|', $input);

foreach($parents as $parent) {
    $childs = explode(">", $parent);
    if(count($childs) === 1) {
        $result [] = [
            'name' => $childs[0],
            'parent' => false
        ];
    } else {
        $result [] = [
            'name' => $childs[1],
            'parent' => $childs[0]
        ];
    }
}

为什么不基于父分隔符将这些行拆分,并构建一个关联数组,其中嵌套子数组

示例字符串:进步主义与第一次世界大战>性别与平等|进步主义与第一次世界大战>社会变革与改革|大萧条与新政

将成为

['Progressivism and World War 1'] => ['Gender Equality', 'Social Change and Reform']
['The Great Depression and the New Deal'] => [...]

父项是外部键,子项自动关联到父项。应该使循环和引用数据更容易。

您实际尝试过什么吗?当你陷入困境时,我们很乐意帮助你,但你仍需要自己努力。如果您尝试过某件事,请分享您的尝试,并解释它在何处以及如何失败。@El_Vanja,抱歉,我应该提供我尝试过的东西。我的头在另一个地方。我是从一个观点来看待它的,那就是我已经尝试了我这边的一切。除非我什么都试过,否则我不会问stackoverflow。但我明白你的意思。@Ein当你回答那些毫无努力的需求问题时,你就在这里继续虐待志愿者。志愿者不得被视为自由代码编写者。我们来这里是为了帮助别人,而不是免费为别人做事。在发布答案之前,请要求提问者提供更多信息。哦,好的,所以将来我会要求更多信息。非常感谢。