2012-07-04 4 views
0

У меня есть содержание HTML, как этотpreg_match_all не дает желаемого результата

some html text [link id="1"] some html text 
some html text [link id="2"] some html text 
some html text [link id="3" stat="y"] some html text 
some html text [link id="4" stat="y"] some html text 

Я использую

var_dump(preg_match_all('/\[link([^\[]+)\]/',$html_tags, $result));

извлечь [link] теги из него, и это дает мне array таких как

array(2) { 
    [0]=> array(4) { 
    [0]=> string(13) "[link id="1"]" 
    [1]=> string(13) "[link id="2"]" 
    [2]=> string(21) "[link id="3" stat="y"]" 
    [3]=> string(21) "[link id="4" stat="y"]" 
    } 
    [1]=> array(4) { 
    [0]=> string(7) " id="1"" 
    [1]=> string(7) " id="2"" 
    [2]=> string(15) " id="3" stat="y"" 
    [3]=> string(15) " id="4" stat="y"" 
    } 
} 

Can anyo ne, скажите, пожалуйста, как я могу получить результат, подобный этому

array (1){ 
    [0]=> array (4) { 
     [0] => array (2){ 
      [id] => string(1) "1" 
      [stat] => string(0) "" 
     } 
     [1] => array (2){ 
      [id] => string(1) "2" 
      [stat] => string(0) "" 
     } 
     [2] => array (2){ 
      [id] => string(1) "3" 
      [stat] => string(1) "y" 
     } 
     [3] => array (2){ 
      [id] => string(1) "4" 
      [stat] => string(1) "y" 
     } 
    } 
} 
+0

'get_meta_tags ($ html_tags)' делает точный результат, который я хочу, но как я могу использовать его для получения '[link]' тегов? – Anuj

ответ

1

Вы можете использовать пользовательские письменные функции и array_map.

http://php.net/manual/en/function.array-map.php

//first flatten array 
$array = $array[1]; 
array_map("passone", $array); 
array_map("passtwo", $array); 


function passone ($n) { 
    return substr($n, 1); 
} 

function passtwo ($n) { 
    $nx = explode(" ", $n); 
    preg_match("link=\"(.*?)\"", $nx[0], $matches); 
    $ret['id'] = $matches[0]; 
    if (!empty($nx[1])) 
    { 
     $times = preg_match("stat=\"(.*?)\"", $nx[1], $matches); 
     if ($times != 0) 
     { 
     $ret['stat'] = $matches[0]; 
     } 
    } 
    return $ret; 
} 

Это должно работать для вас.

+0

Вы просто потрясающе ... большое спасибо за этот полный скрипт. Большое спасибо :) – Anuj

+0

Вторая функция имеет некоторую ошибку и всегда дает мне массив с ложным значением, можете ли вы исправить его 'array (2) { [0] => массив (2) { [ "ID"] => BOOL (ложь) [ "стат"] => BOOL (ложь) } [1] => массив (2) { [ "ID"] => BOOL (ложь) [ "стат"] => строка (9) "суб =" аа "" } } ' – Anuj

+0

Я установил ее .. – djmati11

Смежные вопросы