2 votes

Séparation d'une chaîne de caractères en un tableau

J'ai du mal à diviser cette chaîne de caractères en un tableau selon le modèle dont j'ai besoin. La chaîne est :

ATTRIBUTE1: +VALUE1;
ATTRIBUTE2: -VALUE2%;

J'ai essentiellement besoin d'un tableau comme celui-ci :

array (
    [0] => "ATTRIBUTE1", 
    [1] => "+", 
    [2] => "VALUE1", 
    [3] => "%"
)
array (
    [0] => "ATTRIBUTE2", ...
)

Le "%" est facultatif, mais le signe +/- ne l'est pas. Toute aide serait appréciée !

3voto

NullUserException Points 42268

Vous pourriez utiliser une expression rationnelle :

$text= "ATTRIBUTE1: +VALUE1;\nATTRIBUTE2: -VALUE2%;";
echo "STRING\n" . $text . "\n\n";

preg_match_all("~
                ^             # match start of line
                ([^:]+):\s*   # match anything that's not a ':' (attribute), followed by a colon and spaces
                ([+-])        # match a plus or a minus sign
                ([^%;]+)      # match anything that's not a '%' or ';' (value)
                (%?)          # optionally match percent sign 
                ;\s*$         # match ';' then optional spaces and end of line
                ~mx", $text, $matches, PREG_SET_ORDER);

print_r($matches);

Imprimés :

STRING
ATTRIBUTE1: +VALUE1;
ATTRIBUTE2: -VALUE2%;

Array
(
    [0] => Array
        (
            [0] => ATTRIBUTE1: +VALUE1;
            [1] => ATTRIBUTE1
            [2] => +
            [3] => VALUE1
            [4] => 
        )

    [1] => Array
        (
            [0] => ATTRIBUTE2: -VALUE2%;
            [1] => ATTRIBUTE2
            [2] => -
            [3] => VALUE2
            [4] => %
        )

)

Il se peut que vous deviez jouer avec l'expression rationnelle, mais il y a des commentaires maintenant et cela ne devrait pas être trop difficile à comprendre.

-1voto

Tim Withers Points 8091

Une chose que vous pourriez faire :

$str=explode(": ",$str);
$array[0]=$str[0];
$array[1]=substr($str[1],0,1);
if(substr($str[1],strlen($str[1])-1)=="%"){
    $array[2]=substr($str[1],1,strlen($str[1])-2);
    $array[3]="%";
}else
    $array[2]=substr($str[1],1);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X