Fusion lignes tableau avec for?

Darkangel
Invité n'ayant pas de compte PHPfrance

25 nov. 2013, 12:40

Bonjour à toutes et à tous,,

j'ai le code suivant:

Code : Tout sélectionner

for ($i = 0; $i < $result; $i++) { echo ' <TR> <TH>'.$wp[$i]["WP_nb"].'</TH> <TD>'.$wp[$i]["WP_type"].'</TD> <TD>'.$wp[$i]["WP_titre"].'</TD> <TD>'.$wp[$i]["WP_start"].'</TD> <TD>'.$wp[$i]["WP_end"].'</TD> <TD>'.$wp[$i]["WP_objectif"].'</TD> </TR> '; }
Tout fonctionne bien et cela me génère mes résultats sous forme de tableau.
cependant comme j'ai plusieurs WP_objectif, les premières infos de la ligne sont parfois similaires sur plusieurs lignes.
comment puis je procéder afin que ces premiers champs puissent être fusionnés??

j'ai bidoullé un peu ce premier codage mais j'aimerais bien que les 5 premieres colonnes se fusionnent de sorte à ce que le texte n'appairaisse qu'une fois et centré:

Code : Tout sélectionner

$a=""; for ($i = 0; $i < $result; $i++) { echo '<TR>'; if ($wp[$i]["WP_nb"] != $a) { echo ' <TH>'.$wp[$i]["WP_nb"].'</TH> <TD>'.$wp[$i]["WP_type"].'</TD> <TD>'.$wp[$i]["WP_titre"].'</TD> <TD>'.$wp[$i]["WP_start"].'</TD> <TD>'.$wp[$i]["WP_end"].'</TD>'; } else { echo ' <TD colspan="5"></TD>'; } echo '<TD>'.$wp[$i]["WP_objectif"].'</TD> </TR> '; $a = $wp[$i]["WP_nb"]; }
merci par avance pour votre aide

Mammouth du PHP | 2278 Messages

25 nov. 2013, 13:02

Bjr,
1 mettre les balises html en minuscules.
2 Les lignes ayant objectif commun sont-elles consécutives : si oui c'est possible en procédant autrement.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Darkangel
Invité n'ayant pas de compte PHPfrance

25 nov. 2013, 13:12

Bonjour;

ok pour votre remarque sur les balises HTML.
je procède à la modif dans mon script.

oui les lignes sont consécutives pour répondre à votre question

Mammouth du PHP | 2278 Messages

25 nov. 2013, 14:24

Voici une simulation, si j'ai bien compris la situation:
<?PHP
$wp = array
(
	1=>array("nb"=>1, "type"=> "MACHIN", "titre"=>"les petits malins", "start"=> "100", "end"=>"1000", "OBJECTIF"=>"radio"),
	2=>array("nb"=>1, "type"=> "MACHIN 2", "titre"=>"les petits choux", "start"=> "100", "end"=>"1000", "OBJECTIF"=>"radio"),
	3=>array("nb"=>1, "type"=> "MACHIN 3", "titre"=>"les gros malins", "start"=> "100", "end"=>"1000", "OBJECTIF"=>"radio"),
	4=>array("nb"=>1, "type"=> "MACHIN 4", "titre"=>"les petits russes", "start"=> "100", "end"=>"1000", "OBJECTIF"=>"télé"),
	5=>array("nb"=>1, "type"=> "MACHIN 5", "titre"=>"les petits russes", "start"=> "100", "end"=>"1000", "OBJECTIF"=>"télé"),
	6=>array("nb"=>1, "type"=> "MACHIN 6", "titre"=>"les gros cétinsr", "start"=> "100", "end"=>"1000", "OBJECTIF"=>"télé"),
);
$old_objectif = "";
$nb_elem= count($wp);
$chaine = "<table border = '1'>";
for ($i = 1; $i <= $nb_elem;$i++)
{
	$objectif= $wp[$i]['OBJECTIF'];
	$nb = $wp[$i]['nb'];
	$type = $wp[$i]['type'];	
	if ($objectif != $old_objectif)
	{
		$old_objectif = $objectif;
		print "<br>$objectif";
		$ligne = "<tr><td colspan= '4'>$objectif</tr>";
		$chaine .= $ligne;
		$ligne = "<tr><td>$nb</td><td>$type</td></tr>";	
		$chaine .= $ligne;
	}
	else
	{
		
	}	
}
$chaine .= "</table>";
 print "$chaine";
 ?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Darkangel
Invité n'ayant pas de compte PHPfrance

25 nov. 2013, 15:07

merci, mais ce n'est pas tout a fait cela.


si je prends votre script cela se modifierait comme cela:
$wp = array
(
        1=>array("WP_nb"=>1, "WP_type"=> "MACHIN", "WP_titre"=>"les petits malins", "WP_start"=> "100", "WP_end"=>"1000", "WP_objectif"=>"radio"),
        2=>array("WP_nb"=>1, "WP_type"=> "MACHIN", "WP_titre"=>"les petits malins", "WP_start"=> "100", "WP_end"=>"1000", "WP_objectif"=>"tele"),
        3=>array("WP_nb"=>1, "WP_type"=> "MACHIN", "WP_titre"=>"les gros malins", "WP_start"=> "100", "WP_end"=>"1000", "WP_objectif"=>"radio"),
        4=>array("WP_nb"=>1, "WP_type"=> "MACHIN 4", "WP_titre"=>"les petits russes", "WP_start"=> "100", "WP_end"=>"1000", "WP_objectif"=>"télé"),
        5=>array("WP_nb"=>1, "WP_type"=> "MACHIN 5", "WP_titre"=>"les petits russes", "WP_start"=> "100", "WP_end"=>"1000", "WP_objectif"=>"télé"),
        6=>array("WP_nb"=>1, "WP_type"=> "MACHIN 6", "WP_titre"=>"les gros cétinsr", "WP_start"=> "100", "WP_end"=>"1000", "WP_objectif"=>"télé"),
);
$old_objectif = "";
$nb_elem= count($wp);
$chaine = "<table border = '1'>";
for ($i = 1; $i <= $nb_elem;$i++)
{
        $objectif= $wp[$i]['WP_objectif'];
        $nb = $wp[$i]['WP_nb'];
        $type = $wp[$i]['WP_type'];        
		$titre = $wp[$i]['WP_titre'];
		$start= $wp[$i]["WP_start"];
		$end = $wp[$i]["WP_end"];
		
        if ($objectif != $old_objectif)
        {
                $old_objectif = $objectif;
                
				$ligne = "<tr><td>$nb</td><td>$type</td><td>$titre</td><td>$start</td><td>$end</td>"; 
                $chaine .= $ligne;          
				$ligne = "<td colspan= '5'>$objectif</td></tr>";
                $chaine .= $ligne;
                
        }
        else
        {
                
        }       
}
$chaine .= "</table>";
 print "$chaine";

mais j'ai toujours le meme soucis.

Au lieu d'avoir un rendu comme cela
1 MACHIN les petits malins 100 1000 radio
1 MACHIN les petits malins 100 1000 tele
1 MACHIN les gros malins 100 1000 radio
1 MACHIN 4 les petits russes 100 1000 télé

je voudrais
1 MACHIN les petits malins 100 1000 radio
tele

avec 1 MACHIN les petits malins 100 1000 centré verticalement

Darkangel
Invité n'ayant pas de compte PHPfrance

25 nov. 2013, 15:08

avec le tele et radio l'un en dessous de l'autre

Mammouth du PHP | 2278 Messages

25 nov. 2013, 15:32

J'avais hésité entre les deux présentations.
Je verrai plus tard car le source est sur la partition unix et là je suis sous windaube. Indications vraisemblables

dans la boucle compter les lignes avec objectif identique, les constituer dans une chaine $lignes_en_attente:
sous la forme :
la première avec une cellule pour chaque valeur SAUF l'objectif et PAs de début de ligne :
<td>$valeur1</td><td>v2</td><td>v3</td></tr>
les autres ainsi avec une cellule pour chaque valeur SAUF l'objectif:
<tr><td>......</tr>

quand on arrive sur un nouvel objectif, modifier la chaine en ajoutant au début:
$chaine = "<tr> <td rowspan ='nb_lignes'>old_objctif</td></tr>".$chaine;
ajouter le tableau
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Darkangel
Invité n'ayant pas de compte PHPfrance

25 nov. 2013, 15:58

wah ca me parait bien compliqué là...

Mammouth du PHP | 2278 Messages

25 nov. 2013, 21:29

Il y a peut-être plus simple
<?PHP
$wp = array
(
	1=>array("nb"=>1, "type"=> "MACHIN", "titre"=>"les petits malins", "start"=> "100", "end"=>"1000", "OBJECTIF"=>"radio"),
	2=>array("nb"=>1, "type"=> "MACHIN 2", "titre"=>"les petits choux", "start"=> "100", "end"=>"1000", "OBJECTIF"=>"radio"),
	3=>array("nb"=>1, "type"=> "MACHIN 3", "titre"=>"les gros malins", "start"=> "100", "end"=>"1000", "OBJECTIF"=>"radio"),
	4=>array("nb"=>1, "type"=> "MACHIN 4", "titre"=>"les petits russes", "start"=> "100", "end"=>"1000", "OBJECTIF"=>"télé"),
	5=>array("nb"=>1, "type"=> "MACHIN 5", "titre"=>"les petits russes", "start"=> "100", "end"=>"1000", "OBJECTIF"=>"télé"),
	6=>array("nb"=>1, "type"=> "MACHIN 6", "titre"=>"les gros cétinsr", "start"=> "100", "end"=>"1000", "OBJECTIF"=>"télé"),
);
/*extrait les champs objectifs du tableau $wp pour les mettre dans un tableau indicé à partir de 0;*/
$objectifs = array_column ($wp, "OBJECTIF");
/*décommenter pour voir le résultat*/
//print_r($objectifs);
/*compte combien il y a d'occurrence de chaque valeur du tableau $objectif*/
$vals = array_count_values($objectifs);
/*décommenter pour voir le résultat*/
//print_r($vals);
/*réduit le tableau aux clefs dfférentes*/
$objectifs = array_keys($vals);
$ligne = 1; //servira à relire le tableau d'origine
$tableau = "<table border = '1'>";
for($j = 0; $j < count($vals); $j++)
{
	$objectif = $objectifs[$j];
	$valeur = $vals[$objectif];
	$titre = $wp[$ligne]['titre'];
	$tableau .= "<tr><td rowspan = '$valeur'>$objectif</td><td>$titre</td></tr>";
	for ($i = $ligne+1; $i < $ligne + $valeur; $i++)
	{
		$titre = $wp[$i]['titre'];
		$tableau .= "<tr><td>$titre</td></tr>";		
	}
$ligne +=$valeur;	
}
$tableau .= "</table>";
 print "$tableau";
 ?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Darkangel
Invité n'ayant pas de compte PHPfrance

26 nov. 2013, 10:21

merci mais merdum j'ai pas la version php 5.5
je tourne sous easyphp mais encore sous windows xp..

tu coup, array_column fonctionne pas....

Mammouth du PHP | 2278 Messages

26 nov. 2013, 13:10

pas testé mais il existe peut-être une solution;

https://github.com/ramsey/array_column/ ... column.php
Sans quoi, il faut parcourir d'abord le tableau pour identifier les objectifs et compter combien de fois apparaît chacun....J'ai essayé de faire autrement, mais c'est un vrai casse-tête.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Darkangel
Invité n'ayant pas de compte PHPfrance

26 nov. 2013, 16:07

Merci.

Je vais donc essayer de cogiter pour savoir comment parcourir le tableau t'abord: