Comment est-ce que je preg_match le morceau de "shortcode" suivant pour que la vidéo et l'alignement soient des clés de tableau et leurs valeurs sont ce qui est dans les guillemets? [video = « 123456 » align = « left » /]preg_match un "shortcode" pour créer un tableau avec des clés de tableau sémantique
1
A
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);
-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
- 1. preg_match tableau
- 2. Commander des clés de tableau?
- 3. preg_match au tableau. PHP
- 4. Créer un tableau de tableaux avec Linq
- 5. Créer un tableau de fractions
- 6. pour créer un composant de tableau blanc
- 7. Tableau de chaînes pour un tableau d'objets
- 8. Créer un tableau de grille
- 9. composant de tableau avec des clés de chaîne
- 10. récursive remplacer les clés dans un tableau
- 11. Créer un tableau avec la constante
- 12. Besoin d'aide pour créer un tableau d'objets
- 13. PHP renommer les clés d'un tableau dans un tableau multidimensionnel
- 14. Créer un tableau pour simpleGallery (jquery plugin)
- 15. PHP convertit un tableau imbriqué en un seul tableau tout en concaténant des clés?
- 16. Trier un tableau multidimensionnel par plusieurs clés
- 17. PHP: Créer un tableau pour une plage
- 18. Comment créer un tableau d'images?
- 19. Comment créer un tableau dans un autre tableau?
- 20. Comment combiner un tableau de clés avec les valeurs correspondantes d'un autre tableau?
- 21. objective-c comment créer un tableau d'énumération avec ses valeurs de chaîne en tant que clés?
- 22. Conversion d'un tableau de clés et un tableau de valeurs dans un hachage en Ruby
- 23. tableau de tri avec plusieurs clés
- 24. Comment aplatir un tableau associatif dans un tableau avec seulement des valeurs en PHP?
- 25. MySQL Créer un tableau récapitulatif?
- 26. Comment créer un tableau d'un tableau de structures
- 27. Créer un nouveau tableau à partir de la liste des clés dans PHP
- 28. Comment créer des structures de données de type tableau avec des clés d'objet en PHP?
- 29. créer un tableau js dynamiquement?
- 30. Récupère un sous-ensemble d'un tableau basé sur un tableau de clés
Je suis novice en PHP et j'essaye de m'améliorer et ça vient de faire ma nuit. Merci beaucoup ghostdog74! –
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. –