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

时间:2014-12-15 08:23:10

标签: php arrays

我有一个php字符串如下:

$mystr ="f7_r11 f1_r2 f1_r19 f7_r10";

正如你所看到的,有一些id用“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);

但最终输出不是我想要的!!有谁可以帮助我?

1 个答案:

答案 0 :(得分:0)

@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);