Fusion lignes tableau avec for?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fusion lignes tableau avec for?

Re: Fusion lignes tableau avec for?

par Darkangel » 26 nov. 2013, 16:07

Merci.

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

Re: Fusion lignes tableau avec for?

par sirakawa » 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.

Re: Fusion lignes tableau avec for?

par Darkangel » 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....

Re: Fusion lignes tableau avec for?

par sirakawa » 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";
 ?>

Re: Fusion lignes tableau avec for?

par Darkangel » 25 nov. 2013, 15:58

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

Re: Fusion lignes tableau avec for?

par sirakawa » 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

Re: Fusion lignes tableau avec for?

par Darkangel » 25 nov. 2013, 15:08

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

Re: Fusion lignes tableau avec for?

par Darkangel » 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

Re: Fusion lignes tableau avec for?

par sirakawa » 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";
 ?>

Re: Fusion lignes tableau avec for?

par Darkangel » 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

Re: Fusion lignes tableau avec for?

par sirakawa » 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.

Fusion lignes tableau avec for?

par Darkangel » 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