Découper une chaîne tous les X caractères

Résolu
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -  
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

2 réponses

Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
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,
1
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
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
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Ouch PHP 4, ca ne nous rajeunit pas ^^
Une solution alternative : https://gist.github.com/madebyreformat/2050592
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
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/........
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
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.
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
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 ++
0
astuces72 Messages postés 7769 Date d'inscription   Statut Membre Dernière intervention   1 641
 
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
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 ?
0