2016-10-17 7 views
0

Ich versuche, eine Zeichenfolge durch Klammern zu teilen, aber mein Array hat einige zusätzliche leere Werte.Split String von Klammern

Ich habe versucht, den Code einer ähnlichen Frage, die beantwortet wurde, und es teilt die Zeichenfolge, sondern fügt auch leere Werte. dies ist

// faq data 
$faq    = "SELECT * FROM `web_content` WHERE catid = 13 AND `alias` = '".$conn->real_escape_string($_GET['alias'])."' AND state = 1 ORDER BY ordering"; 
$faqcon    = $conn->query($faq); 
$faqcr    = array(); 
while ($faqcr[] = $faqcon->fetch_array()); 

$faqtext = $faqcr[0]['introtext']; 
$arr = preg_split('/\h*[][]/', $faqtext, -1, PREG_SPLIT_NO_EMPTY); 

echo '<pre>'; 
print_r($arr); 
echo '</pre>'; 

Der Ausgang des Arrays:

Array 
(
    [0] => 

    [1] => Vraag1? || Antwoord1 
    [2] => 

    [3] => Vraag2? || Antwoord2 
    [4] => 

    [5] => Vraag3? || Antwoord3 
    [6] => 
) 

Mein String sieht wie folgt aus:

<p>[Vraag1? || Antwoord1]</p> 
<p>[Vraag2? || Antwoord2]</p> 
<p>[Vraag3? || Antwoord3]</p> 

Die <p> Tags sind irrelevant, im nicht auf jene Spaltung und ich kann nur Verwenden Sie Strip-Tags danach.

Ausgabe der Antwort:

Array 
    (
     [0] => Array 
      (
       [0] => [Vraag1? || Antwoord1] 
       [1] => [Vraag2? || Antwoord2] 
       [2] => [Vraag3? || Antwoord3] 
      ) 

     [1] => Array 
      (
       [0] => Vraag1? || Antwoord1 
       [1] => Vraag2? || Antwoord2 
       [2] => Vraag3? || Antwoord3 
      ) 

    ) 
+0

Sieht aus wie Sie gerade 'brauchen '/ \ s * [] []/''um auch vertikalen Whitespaces zu entsprechen (das heißt, wenn Sie die Tags entfernen und dann eine Eingabezeichenfolge mit Zeilenumbrüchen erhalten - siehe https://ideone.com/l542yN). –

+0

@ WiktorStribiżew Das gibt mir immer noch leere Array-Werte – twan

Antwort

0
$line = '[This] is a [test] string, I think [this] answers [your] question.'; 
preg_match_all("/\[([^\]]*)\]/", $line, $matches); 
var_dump($matches[1]); 
+0

Das gibt mir zwei Arrays irgendwie, ich werde die Ausgabe Ihres Codes in meiner Frage hinzufügen. – twan

+0

Verwenden Sie einfach die zweite, d. H. $ Übereinstimmungen [1] – tarun14110

+0

Ja, das funktioniert, aber warum gibt es 2 Arrays? – twan

0

Bekommen Sie das Ergebnis Sie erwartet (außer zusätzliche leeren Einträgen im resultierenden Array)?
Wenn Ihr nur Problem ist nur leere Einträge in Ihrem Array haben, können Sie schnell, dass fix mit einer Kombination aus array_values() und array_filter() wie unten durch die Schnipsel demonstriert:

<?php 

    $arr = [ 
     '', 
     'Vraag1? || Antwoord1', 
     '', 
     'Vraag2? || Antwoord2', 
     '', 
     'Vraag3? || Antwoord3', 
     '', 
    ]; 

    var_dump($arr); 

    var_dump(array_values(array_filter($arr)));