Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Problem z [PREG_SPLIT]
Forum PHP.pl > Forum > PHP
Spirit86
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
crash
  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. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.