Bonjour,

Voila j'ai une chaîne de ce type :

'"label":"IS Luxembourg","value":"2","label":"IS Belgique","value":"11","label":"IS Pays Bas","value":"15"'

J'aimerais extraire le chiffre derriere value
J'ai essayé avec des str_replace, mais le label est aléatoire.
Merci pour votre aide.

4 réponses


E-Bismuth
Réponse acceptée

Essaye en ajoutant des accolades autour, puis tu fait un

Json_decode($Tonstring,True)

Si cette feinte fonctionne tu devrais te retrouver avec un array

cid5420
Auteur
Réponse acceptée

en fait le format de ma chaine est ce que je reçois d'un formulaire (flexdatalist).
Merci, je n'avais pas pensé au json :/

Salut,

Tu peux le faire via une expresssion régulière qui récupère le '15'.

Ou sinon, tu peux essayer d'extraire le chiffre 'value' en parcourant la chaîne mais en partant de la fin (Donc sans passer par la valeur aléatoire).

Salut,

Ouais mais il y a plein de 'value',
moi aussi j'au du mal à comprendre ce que tu veux cid5420

Tu veux un tableau de cette sorte ?

$values[0] = 2;
$values[1] = 11;
$values[2] = 15;
...

Si dans ta chaine il n'y a jamais de chiffres dans tes 'label',
tu peux utiliser preg_match_all()

$my_string = '"label":"IS Luxembourg","value":"2","label":"IS Belgique","value":"11","label":"IS Pays Bas","value":"15"';

preg_match_all('/[0-9]+/',  $my_string, $matches);

echo '<pre>';
print_r($matches[0]);
echo '</pre>';

S'il PEUT y avoir des chiffres dans tes 'label',
alors il faut "matcher" : les suites de chiffres qui sont entourées de guillemets,
puis tu enlevera les guillemets avec str_replace()

Sinon,
Est-ce que tu es obligé d'avoir ce format là de chaine ?
je pensais à un truc dans ce style qui serait plus facile à exploiter ensuite :

$my_string = 'IS Luxembourg:2,IS Belgique:11,IS Pays Bas:15';

avec un explode de "," tu as tous les "couple",
et sur chaque couple, un explode de ":" te donne les valeures.

(on peut arriver au même principe si dans ta chaine actuelle, tu remplaces une virgule sur 2 par un point-virgule,
mais ça resterai peut-être un peu trop "verbeu")