Découper une chaîne tous les X caractères [Résolu/Fermé]

Signaler
Messages postés
1295
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
21 septembre 2020
-
Messages postés
1295
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
21 septembre 2020
-
Bonjour,

Je souhaiterais découper une chaîne tous les X caractères.
En supposant que $chaîne soit égale à 201220131724, je voudrais découper $chaîne tous les 4 caractères.

Ce que je pense :
Exemple : faire un explode tous les 4 caractères (quelle fonction utilisée, comment l'écrire ?)
Comment trier ces $chaîne en ordre ASC ou DESC ?

Merci pour vos conseils.

2 réponses

Messages postés
6078
Date d'inscription
vendredi 15 janvier 2010
Statut
Membre
Dernière intervention
13 octobre 2020
1 321
Messages postés
1295
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
21 septembre 2020
10
Merci astuces72.
Si je teste avec un enregistrement à 8 chiffres ($marg), et que je veux avoir comme résultat 4 et 4
echo wordwrap($marg,4,"<br>\n");

j'ai toujours 1 seul enregistrement à 8 chiffres !?
Et dans le cas où ça fonctionne, comment les classer dans un ordre voulu ?
Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
431
Salut,

Si tu veux pouvoir trier les parties de la chaine découpée, tu peux aussi regarder du coté de la fonction str_split() pour récupérer les parties de la chaine dans un tableau : https://www.php.net/manual/fr/function.str-split.php

$monTableau = str_split('abcdefgeh123456789', 4);
sort($monTableau);
var_dump($monTableau);


Bonne journée,
Messages postés
1295
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
21 septembre 2020
10
str_split() fonctionne sous PHP 5 et 7. Mais là, c'est PHP4 et c'est pour cela que ça ne fonctionne pas je pense .......!
J'ai le message d'erreur
Fatal error: Call to undefined function: str_split() in /mnt/100/sda/1/4/th11/gen_famille/gestion/fiche_indiv.php on line 483
Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
431
Ouch PHP 4, ca ne nous rajeunit pas ^^
Une solution alternative : https://gist.github.com/madebyreformat/2050592
Messages postés
1295
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
21 septembre 2020
10
Désolé, je n'arrive pas à appliquer la function à mon script.
si j'écris
$marg = substr($tonarray[$i]['date_mariage'], -4);

function str_split($marg) {
	$str_array=array();
	$len=strlen($marg);
	for($i=0; $i<$len; $i++) {
		$str_array[]=$marg{$i};
	}
	return $str_array;
	}

j'ai le message d'erreur
Fatal error: Cannot redeclare str_split() (previously declared in /mnt/100/sda/........
Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
431
Très étrange comme message d'erreur, celui-ci indique que la fonction est déjà déclarée or le message d'erreur de ton premier commentaire indique que la fonction n'existe pas.

Sinon pour faire encore plus simple, une simple boucle avec un substr() tout les 4 caractères devrait fonctionner sur les versions PHP4 et +

$chaine = '201220131724';
$parties = array();

for ($i = 0; $i < strlen($chaine); $i = $i + 4) {
    $parties[] = substr($chaine, $i, 4);
}

var_dump($parties);


Si la chaine peut contenir des caractères multi-octet, les fonctions strlen et substr devraient être remplacées par mb_strlen et mb_substr.
Messages postés
1295
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
21 septembre 2020
10
Merci pour ton intervention Pitet !
La solution a été trouvé :
function tri_mariage($a, $b) {
   return substr($a['date_mariage'], -4) > substr($b['date_mariage'], -4);
}

usort($tonarray, "tri_mariage"); 


A ++