PHP 将字符串分解为具有唯一字符串 ID 的树数组


PHP explode string to tree array with unique string id

我有一个php字符串如下:

$mystr ="f7_r11 f1_r2 f1_r19 f7_r10";

如您所见,有一些 ids 表示为"f",这些是顶级,有一些 id 表示为"r",这些是子级别

我需要将其分解为一个数组,包括唯一的顶级(f)包含子级(r)完全像这样:

Array
(
    [0] => Array
        (
            [f_id] => 7
            [r_ids] => Array
                (
                    [0] => Array
                        (
                            [r_id] => 11
                        )
                    [1] => Array
                        (
                            [r_id] => 10 
                        )
                )
        )
    [1] => Array
        (
            [f_id] => 1
            [r_ids] => Array
                (
                    [0] => Array
                        (
                            [r_id] => 2
                        )
                    [1] => Array
                        (
                            [r_id] => 19 
                        )
                )
        )

)

我尝试了一些PHP代码:

$explode = explode(" ", $mystr);
$unique = array_unique($explode);
$array= array_values($unique);

但最终输出不是我想要的!! 谁能帮我?

@Marco Mura @zerkms

我找到了答案 我的自我:)

$explode = explode(" ", $array);
$fs=$fs2="";
for($i=0; $i<count($explode); $i++){
                    $f=strstr($explode[$i], '_', true);
                    $f = str_replace("f", "", $f);          
                    $fs[].=$f;
}
$fs = array_unique($fs);
$fs= array_values($fs);
for($i=0; $i<count($fs); $i++){
    $fs2[$i]['f_id']=$fs[$i];
}
for($i=0; $i<count($explode); $i++){
    $r=strstr($explode[$i], '_');
    $r = str_replace("_r", "", $r);
    $f=strstr($explode[$i], '_', true);
    $f = str_replace("f", "", $f);
    for($j=0; $j<count($fs); $j++){
        if( $f == $fs[$j]){
            $fs2[$j]['r_ids'][]=$r;
        }
    }
}
print_r($fs2);