【问题标题】:PHP explode string to tree array with unique string idPHP将字符串分解为具有唯一字符串ID的树数组
【发布时间】:2015-02-13 07:19:45
【问题描述】:

我有一个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);

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

【问题讨论】:

  • 详细说明您将如何逐步手动执行此操作。然后将给定的算法转换成代码。
  • 如果你有 f7_r11_rxx f1_ryy_rzz 会很容易,你可以拆分并有一个简单的工作模式
  • @Marco Mura:您的序列化与 OP 的序列化没有区别。您可以在 3 行之间进行转换。
  • @zerkms 不是那 3 行代码吗?
  • @Marco Mura:我不会免费为 OP 实现 2 种算法(它不会以任何方式帮助他们)。但很明显格式是相似的。

标签: php arrays


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    相关资源
    最近更新 更多