2010-02-02 5 views

Répondre

1
$string='[video="123456" align="left"/]'; 
$string= preg_replace("/\/|\[|\]/","",$string); 
$s = explode(" ",$string); 
foreach ($s as $item){ 
    list($tag, $value) = explode("=",$item); 
    $array[$tag]=$value; 
} 
print_r($array); 
+0

Je suis novice en PHP et j'essaye de m'améliorer et ça vient de faire ma nuit. Merci beaucoup ghostdog74! –

+0

Si cela a résolu votre problème, vous devriez attribuer une réponse en cliquant sur la coche à côté de la question afin que les autres intéressés par la réponse puissent trouver ce qui a fonctionné pour vous. –

-1

Je ne pense pas qu'il y ait une (simple) façon de le faire en utilisant une seule expression régulière, mais cela va fonctionner dans une assez générale ainsi, choisissant les balises et les analyse syntaxique:

$s = 'abc[video="123456" align="left"/]abc[audio="123456" volume="50%"/]abc'; 

preg_match_all('~\[([^\[\]]+)/\]~is', $s, $bracketed); 
$bracketed = $bracketed[1]; 

$tags = array(); 
foreach ($bracketed as $values) { 
    preg_match_all('~(\w+)\s*=\s*"([^"]+)"~is', $values, $pairs); 
    $dict = array(); 
    for ($i = 0; $i < count($pairs[0]); $i++) { 
    $dict[$pairs[1][$i]] = $pairs[2][$i]; 
    } 

    array_push($tags, $dict); 
} 

//-----------------  

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

sortie:

Array 
(
    [0] => Array 
     (
      [video] => 123456 
      [align] => left 
     ) 

    [1] => Array 
     (
      [audio] => 123456 
      [volume] => 50% 
     ) 

) 
1

Voici une autre approche utilisant array_combine():

$str = '[video="123456" align="left"/][video="123457" align="right"/]'; 

preg_match_all('~\[video="(\d+?)" align="(.+?)"/\]~', $str, $matches); 

$arr = array_combine($matches[1], $matches[2]); 

print_r() sortie $arr:

Array 
(
    [123456] => left 
    [123457] => right 
) 
0

Autre solution avec des paramètres nommés:

$str = '[video="123456" align="left"/][video="123457" align="right"/]'; 

$matches = array(); 
preg_match_all('/\[video="(?P<video>\d+?)"\salign="(?P<align>\w+?)"\/\]/', $str, $matches); 

for ($i = 0; $i < count($matches[0]); ++ $i) 
    print "Video: ".$matches['video'][$i]." Align: ".$matches['align'][$i]."\n"; 

Vous pouvez également réutiliser la array_combine précédente s olution donnée par Alix:

print_r(array_combine($matches['video'], $matches['align'])); 
Questions connexes