сложная манипуляция строк в PHP

У меня немного запутанный вопрос, пожалуйста, со мной.

У меня есть что-то вроде этого.

<form id="formPropiedades" name="formPropiedades" method="post" action="./index.php"> <table width="70%" cellpadding="2" border="1" style="margin: 0 auto;margin-bottom:70px" class="parametros"> <caption> <h1>Parámetros generales de la plantilla</h1> </caption> <tbody> <tr> <th colspan="2">Campo</th> <th colspan="6">Filtro</th> </tr> <tr class="row"> <td class="dbList" colspan="2">Address</td> <td colspan="6"> <input type="text" style="width: 100%;border: solid 1px black;" name="inp[]" value=""> <select id="tablaCampo1" class="tablaCampo1" name="tablaCampo1"> <option value="SALTEST.ANUNCIO.ID_CIUDAD">SALTEST.ANUNCIO.ID_CIUDAD</option> <option value="SALTEST.ANUNCIO.CIUDAD">SALTEST.ANUNCIO.CIUDAD</option> <option value="SALTEST.ANUNCIO.MUNICIPIO">SALTEST.ANUNCIO.MUNICIPIO</option> <option value="SALTEST.ANUNCIO.ID_ESTADO">SALTEST.ANUNCIO.ID_ESTADO</option> <option value="SALTEST.ANUNCIO.ESTADO">SALTEST.ANUNCIO.ESTADO</option> <option value="SALTEST.ANUNCIO.ID_MUNICIPIO">SALTEST.ANUNCIO.ID_MUNICIPIO</option> </select> <button class="makeStrng" type="button">+</button> </td> </tr> <tr> <td align="right" colspan="8"> <input type="button" id="guardarBtn" value="guardar" name="guardar" style=" float:left"> <input type="button" id="step1" value="prev" name="prev"> <input type="submit" id="propiedades" value="Enviar" name="submitme"> </td> </tr> </tbody> </table> </form> 

Таким образом, опция в select – это фактически столбцы из XML. У этого есть данные для соответствующего поля

Чтобы дать вам идею, xml выглядит примерно так:

 <SALTEST> <ANUNCIO> <CIUDAD>Some Name</CIUDAD> <MUNICIPIO>SOme Name </MUNICIPIO> <ESTADO>Some name </ESTADO> </ANUNCIO> <ANUNCIO> <CIUDAD>Some Name</CIUDAD> <MUNICIPIO>SOme Name </MUNICIPIO> <ESTADO>Some name </ESTADO> </ANUNCIO> <SALTEST> 

Пользователь будет использовать параметр выбора и создать строку, которая будет иметь параметр для создания содержимого

Например

для создания адресной строки пользователь сохранит настройку, например, такую ​​вещь.

Строка1:

 <fld>SALTEST.ANUNCIO.ESTADO </fld><fld>SALTEST.ANUNCIO.MUNICIPIO </fld><fld>SALTEST.ANUNCIO.CIUDAD</fld> 

STRING2

  <fld>SALTEST.ANUNCIO.ESTADO</fld><ltr>,</ltr> <fld>SALTEST.ANUNCIO.MUNICIPIO</fld><ltr>,</ltr><fld>SALTEST.ANUNCIO.CIUDAD</fld> 

STRING3:

 <fn>if(<fld>SALTEST.ANUNCIO.ID_CIUDAD</fld>,<fld>SALTEST.ANUNCIO.ID_CIUDAD</fld>,"<",<fld>SALTEST.ANUNCIO.ID_CIUDAD</fld>)</fn> 

Таким образом, в основном строка будет иметь три типа разделителей.

1. <fld></fld> Эти поля должны использоваться из XML.

2. <fn></fn> Все, что между ними является функцией, и я говорю системе, чтобы определить ее как функцию

3. <ltr></ltr> Все, что между ними – это символы, которые должны использоваться для разделения каждого

например :

  <fld>SALTEST.ANUNCIO.ESTADO</fld><ltr>,</ltr> <fld>SALTEST.ANUNCIO.MUNICIPIO</fld><ltr>,</ltr><fld>SALTEST.ANUNCIO.CIUDAD</fld> 

Должен указать SOme Name, Some Name, Some name.

Я должен написать PHP-скрипт для обнаружения каждого типа строки, а затем применить связанные функции

Пожалуйста, дайте мне некоторое предложение

заранее спасибо

Related of "сложная манипуляция строк в PHP"

Вы хотите создать регулярное выражение, которое идентифицирует окружающие теги и вытаскивает содержимое между ними. Затем вызовите функцию, которая решает, какую именно комбинацию тегов следует заменить. preg_replace_callback кажется функцией du jour для вас.

 $newstr = ''; while ($newstr != $subject) { if ($newstr) $subject = $newstr; echo "subject=".str_replace('<', '&lt;', $subject)."<br />\n"; $newstr = preg_replace_callback('/<(fld|fn|ltr)>([^>]*?)<\/\\1>/', function ($matches) { // $matches[1] contains 'fld' or 'fn' or 'ltr' // $matches[2] contains the string between the tags echo "matches=<pre>".print_r($matches,true)."</pre><br />\n"; switch ($matches[1]) { case 'fld': // here you look up the string in $matches[2] from your XML and return it return "fld:$matches[2]"; break; case 'fn': // here you call whatever function with arg of $matches[2] and return result return "fn:$matches[2]"; break; case 'ltr': return "ltr:$matches[2]"; return $matches[2]; break; } }, $subject); echo "anewstr=".str_replace('<', '&lt;', $newstr)."<br />\n"; if ($newstr == $subject) { echo "Breaking...<br />\n"; break; } } 

Технически, поскольку вы возвращаете значение в каждом случае, вам не нужен break; но я думаю, что это хорошая форма, чтобы оставить его там.