2016-08-05 71 views
-1

我卡住了,我只需要一个指针。 我有这个字符串从数据库检索特殊字符,我想分割它到许多字符串或数组,并在这个过程中我想与“()”交换这些字符。 | p |代表父母。 | C |儿童。将一个字符串分割成许多字符串给定一个模式在php

例一句话是:

my beautiful car is awesome 

*在我的,美丽的,汽车有父子关系。

它的模式:

|p|my|c||p|beautiful|c||c||p|car|p|is|p|awesome 

如果您需要查看原始数组:

Array 
(
[0] => Array 
    (
     [name] => |p|my 
     [parent_id] => 0 
     [child] => Array 
      (
       [0] => Array 
        (
         [name] => |c||p|beautiful 
         [parent_id] => 1 
         [child] => Array 
          (
           [0] => Array 
            (
             [name] => |c||c||p|car 
             [parent_id] => 2 
            ) 

          ) 

        ) 

      ) 

    ) 

[1] => Array 
    (
     [name] => |p|is 
     [parent_id] => 0 
    ) 

[2] => Array 
    (
     [name] => |p|awesome 
     [parent_id] => 0 
    ) 

) 

细分和置换后的最终目标是: ((我的(美(车))(is)(awesome))

+0

对不起,你想干什么?将模式转换为数组?或者把数组转换成字符串?你说的是代替方括号'()',在哪里? – Progrock

+0

我想你的数据库中的特殊字符会更好地描述为标记。 – Progrock

+0

我编辑过,请看最后一行。 –

回答

0
<?php 
$items = 
[ 
    [ 
     'name' => 'foo', 
     'children' => 
      [ 
       [ 
        'name' => 'bar', 
        'children' => 
         [ 
          [ 
           'name' => 'baz', 
          ] 
         ] 
       ] 
      ] 
    ], 
    [ 
     'name' => 'bat', 
    ], 
    [ 
     'name' => 'man', 
    ] 
]; 

function bracketize($array) { 
    $output = ''; 
    foreach($array as $item) { 
     $output .= '('; 
     $output .= $item['name']; 
     if(isset($item['children'])) 
      $output .= bracketize($item['children']); 
     $output .= ')'; 
    } 

    return $output; 
} 

$output = '(' . bracketize($items) . ')'; 
print $output; 

输出:

((foo(bar(baz)))(bat)(man)) 
+0

谢谢Progrock为你付出的努力。这正是我的目标。基于鲁斯兰的论点,我正在用str_replace试验令牌。但这更接近我的目的。我希望我没有占用你整整一天的时间。 –

+0

@MK我正在研究类似的令牌问题,所以这个问题引起了我的兴趣。原来你的数组已经在一个易于使用的表单中。这与构建网站导航嵌套菜单(列表)类似。鲁斯兰反过来帮助我。秋千和环岛。 – Progrock

0

既然你只需要一个指针,我建议以一个正则表达式开始,以获得一个中间数组:

$str = '|p|my|c||p|beautiful|c||c||p|car|p|is|p|awesome'; 
$res = preg_split('/((?:\|c\|)*\|p\|)/', $str, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 
var_export($res); 

/* 
array (
    0 => '|p|', 
    1 => 'my', 
    2 => '|c||p|', 
    3 => 'beautiful', 
    4 => '|c||c||p|', 
    5 => 'car', 
    6 => '|p|', 
    7 => 'is', 
    8 => '|p|', 
    9 => 'awesome', 
) 
*/ 
+0

谢谢。现在我知道要研究什么。 –