2016-08-05 40 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

謝謝。現在我知道要研究什麼。 –