[PHP] Aligner des valeurs avec des tabulations

J’aimerais présenter des données dans un fichier texte, je voudrais les aligner comme icitte mais j’ai seulement réussi à les aligner un peu bizarrement avec le code suivant, pour chaque ligne :$raw .= $inst."\t".$plugin.str_repeat("\t",(floor(6-strlen($plugin)/6))).$name."\r";J’ai divisé par 6 car Firefox a l’air de compter 6 espaces pour une tabulation. Qu’est-ce qui cloche ? J’ai fait quelques recherches mais je ne sais pas quoi chercher (!).

Merci.

Sinon pour faire plus simple (mais pas forcément plus élégant), tu pourrais faire pour chaque colonne :
$valeurcolonne = str_pad($valeur,$largeurcolonne)
puis concaténer le tout.

Genre

$array_valeurs = array('#int'=>array(),'#plugin'=>array(),'#name'=>array()); // ... // là on remplie le tableau // ... $array_colonnes = array ('#int' => 8,'#plugin' => 40,'#name' => 40); foreach ($array_valeurs['#int'] as $key1=>$valeur) { foreach ($array_colonnes as $key2=>$largeurcolonne) { echo str_pad($array_valeurs[$key2][$key1],$largeurcolonne); } echo '\n'; }

printf, tout simplement.

[code]<?php
$frmt = “%-6.d %-28.s %6.d %6.d %6.d %6.d %6.d %s\n”;

$values = array(
array(2, ‘pgp’, 61, 19, 38, 2, 2, ‘(Not in sid)’),
array(9, ‘fortify-linux-x86’, 2, 0, 0, 0, 0, ‘(Not in sid)’)
);

foreach ($values as $v) {
call_user_func_array(‘printf’, array_merge((array)$frmt, $v));
}[/code]

J’ai pas trop fait gaffe à l’alignement exact, j’ai juste mis “en gros” pour que ça ressemble. Tu peux mettre l’alignement à droite ou a gauche, spécifier combien de caractères il doit y avoir au total (permettant de faire le padding, donc), etc etc … C’est fait pour.
Ah, et le call_user_func_array t’es carrément pas obligé de t’en servir, ça permet juste d’appeler printf avec un tableau pour les arguments (comme je fais dans l’example).
Sinon c’est printf($frmt, $arg1, $arg2, …);

Merci pour le code de printf(), j’ignorais que y’avait ces possibilités. Le résultat est propre.

Pour info le code que j’ai utilisé :[code]$frmt = “%-6.s %-28.s %-28.s \n”;
$raw = sprintf($frmt,’#inst’,’#plugin’,’#name’);
$frmt = “%-6.d %-28.s %-28.s \n”;

foreach (…)
{
$raw .= sprintf($frmt,$inst,$plugin,$name);
}

files::putContent(dirname(FILE).’/raw.txt’,$raw);[/code]

Nickel !
Pas mal le printf en php, je connaissais pas non plus.