2016-10-17 2 views
0

Я пытаюсь разбить строку по скобкам, но мой массив имеет некоторые дополнительные пустые значения.Сплит-строка по скобкам

Я попытался использовать код аналогичного вопроса, на который был дан ответ, и он разбивает строку, но также добавляет пустые значения.

// 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>'; 

Выход массива заключается в следующем:

Array 
(
    [0] => 

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

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

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

Моя строка выглядит следующим образом:

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

В <p> метки не имеют никакого отношения, им не разделив на тех, и я могу только после этого используйте полосовые теги.

Выход ответа:

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

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

    ) 
+0

Похоже, вы просто нужно ' '/ \ s * [] []/'', чтобы соответствовать вертикальному пробелу (т. е. если вы разделите теги, а затем получите строку ввода с разрывами строк - см. https://ideone.com/l542yN). –

+0

@ WiktorStribiżew Это все еще дает мне пустые значения массива – twan

ответ

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

Это дает мне несколько массивов, я добавлю вывод вашего кода в свой вопрос. – twan

+0

просто используйте второй i.e $ matches [1] – tarun14110

+0

Да, это работает, но почему есть 2 массива? – twan

0

Вы получите результат, который вы ожидали (для дополнительных пустых записей в результирующем массиве за исключением)?
Если ваша единственная проблема только имея пустые записей в массиве, вы можете быстро исправить с помощью комбинации array_values() и array_filter(), как показано на рисунке сниппета:

<?php 

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

    var_dump($arr); 

    var_dump(array_values(array_filter($arr))); 
Смежные вопросы