Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Problem z [PREG_SPLIT]
Spirit86
post
Post #1





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam.

Mam następujący problem. Mam dowolny string typu:
(1)
Kod
[ABC="title"] Bla bla bla bla bla [ABC="asd"] sadfasfasd  [ABC="bcde"]

Teraz chcę zrobić coś takiego:
Rozpruć tekst znacznikami [ABC="(*.?)"], tak aby powstała tablica:
(2)
Kod
array
{
[0] => array ('Text'=>'Bla bla bla bla bla', 'Title'=>'title')
...
}


Czyli reasumując:
Rozdzielamy String (1) ([ABC='TO_CO_ZNAJDUJE_SIE_W_KLUCZU_TITLE']TO_CO_SIE_ZNAJDUJE_W_POLU_TEXT, tak aby powstała tablica (2).

.pozdrawiam
Go to the top of the page
+Quote Post
crash
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $txt = '[ABC="title"] Bla bla bla bla bla [ABC="asd"] sadfasfasd  [ABC="bcde"]';
  3.  
  4. $out = preg_split( '/\[ABC="(.+?)"\]/', $txt, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );
  5.  
  6. $data = array();
  7. for( $i = 0, $max = count( $out ); $i < $max; $i += 2 )
  8. {
  9.    $data[] = array( 'title' => $out[ $i ], 'text' => $out[ $i + 1 ] );
  10. }
  11.  
  12. print_r( $data );
  13. ?>

Ale to się posypie jak będzie jakiś tekst na początku... Czemu nie zastosujesz formy [X="Y"]Z[/X] ? I wtedy masz ładnie:
  1. <?php
  2. $txt = 'asda [ABC="title"]Bla bla bla bla bla[/ABC][ABC="asd"]sadfasfasd[/ABC][ABC="bcde"][/ABC]';
  3.  
  4. preg_match_all( '/\[([A-Z]+)="(.+?)"\](.*?)\[\/\\1\]/', $txt, $out, PREG_SET_ORDER );
  5.  
  6. $data = array();
  7. foreach( $out as $ret )
  8. {
  9.    $data[] = array( 'title' => $ret[ 2 ], 'text' => $ret[ 3 ] );
  10. }
  11.  
  12. print_r( $data );
  13. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 07:53