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

Résolu/Fermé
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 - 30 janv. 2018 à 11:59
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 - 1 févr. 2018 à 10:19
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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
30 janv. 2018 à 16:12
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 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
30 janv. 2018 à 17:19
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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
30 janv. 2018 à 17:20
Ouch PHP 4, ca ne nous rajeunit pas ^^
Une solution alternative : https://gist.github.com/madebyreformat/2050592
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
30 janv. 2018 à 17:51
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 lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
31 janv. 2018 à 09:25
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 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
Modifié le 1 févr. 2018 à 10:20
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 7723 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 22 avril 2024 1 637
30 janv. 2018 à 12:04
0
t671 Messages postés 1419 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 26 février 2024 11
30 janv. 2018 à 15:13
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