J'ai une longue chaîne comme celle-ci I1: 1; I2: 2; I8: 2; NA1: 5; IA1: [1,2,3,4,5]; S1: asadada; SA1: [ 1, 2, 3, 4, 5]; SA1: [1, 2, 3, 4, 5]; . Maintenant, je veux juste obtenir certains mots comme 'I1', 'I2', 'I8', 'NA1' et ainsi de suite, c'est-à-dire des mots entre ':' & ';' uniquement, et stockez-les dans un tableau. Comment faire cela efficacement?
J'ai déjà essayé d'utiliser preg_split () et cela fonctionne mais me donne une mauvaise sortie. Comme indiqué ci-dessous.
Array
(
[0] => I8
[1] => 2
[2] => I1
[3] => 1
[4] => I2
[5] => 2
[6] => I3
[7] => 2
[8] => I4
[9] => 4
[10] =>
)
Array
(
[0] => NA1
[1] => 5
[2] =>
)
Array
(
[0] => IA1
[1] => [1,2,3,4,5]
[2] =>
)
Array
(
[0] => S1
[1] => asadada
[2] =>
)
Array
(
[0] => SA1
[1] => [1,2,3,4,5]
[2] =>
)
Le résultat que j'obtiens est celui-ci
// $a is the string I want to extract words from
$str = preg_split("/[;:]/", $a);
print_r($str);
Mais j'attends "I8", " I1 ',' I2 ',' I3 ',' I4 'également dans un tableau séparé avec la position [0]. Toute aide sur la façon de procéder.
3 Réponses :
Une approche possible consiste à utiliser une combinaison de explode () et implode () . Le résultat est renvoyé sous forme de chaîne, mais vous pouvez facilement le mettre dans un tableau par exemple.
I1,I2,I8,NA1,IA1,S1,SA1,SA1,.
Sortie:
<?php
$input = "I1:1;I2:2;I8:2;NA1:5;IA1:[1,2,3,4,5];S1:asadada;SA1:[1,2,3,4,5];SA1:[1,2,3,4,5];.";
$output = array();
$array = explode(";", $input);
foreach($array as $item) {
$output[] = explode(":", $item)[0];
}
echo implode(",", $output);
?>
Vous pouvez essayer quelque chose comme.
<?php
$str = 'I1:1;I2:2;I8:2;NA1:5;IA1:[1,2,3,4,5];S1:asadada;SA1:[1,2,3,4,5];SA1:[1,2,3,4,5];';
preg_match_all('/(?:^|[;:])(\w+)/', $str, $result);
print_r($result[1]); // Matches are here in $result[1]
Vous pouvez effectuer une correspondance gourmande pour faire correspondre les éléments entre ; et : en utilisant preg_match_all ()
<?php
$str = 'I1:1;I2:2;I8:2;NA1:5;IA1:[1,2,3,4,5];S1:asadada;SA1:[1,2,3,4,5];SA1:[1,2,3,4,5];';
preg_match_all('/;(.+?)\:/',$str,$matches);
print_r($matches[1]);
Démo en direct: https://3v4l.org/eBsod