Demande pour array

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 : Demande pour array

Re: Demande pour array

par bibi2410 » 14 nov. 2013, 07:35

Finalement j'ai fait mes calculs avec des calculs transformant tout en secondes, que j'ai donc ensuite remis en HMS grâce à la fonction date(), et je classe les résultats à l'aide de javascript.

Merci beaucoup, problème résolu.

Re: Demande pour array

par sirakawa » 29 oct. 2013, 10:00

Mon idée plus en dfétail
Si tu tries sur les temps, tu combines d'abord chaque colonne avec les temps dans dews tableaux différents, tu tries, puis tu extrais les valeurs avec array_data, puis tu recombine les date (au passage tu rconvertis les temps en temps affiches humainement pàar date().

Re: Demande pour array

par bibi2410 » 29 oct. 2013, 05:59

Désolé du monologue. lol.
Mais au moins j'essaie de trouver des solutions. :/
Simulation:
<html>
<form method = 'post' action = 'test.php'>
<table border='1'>
	<tr>
		<th>Colonne 2</th>
		<th>Colonne 3</th>
	</tr>
	<tr>
		<td><input type = 'text' name = 'col2[]' /></td>
		<td><input type = 'text' name = 'col3[]' /></td>
	</tr>
	<tr>
		<td><input type = 'text' name = 'col2[]' /></td>
		<td><input type = 'text' name = 'col3[]' /></td>
	</tr>	
		<tr>
		<td><input type = 'text' name = 'col2[]' /></td>
		<td><input type = 'text' name = 'col3[]' /></td>
	</tr>
</table>
<button type = 'submit'>traiter</button>
</form>
</html>
et début:
<?PHP
error_reporting(E_ALL);
extract($_POST);
$col_dates = array();
$n = count( $col2);
for ($i = 0; $i < $n; $i++)
{
	$col_dates[] = time()+(123*$i);	
}
print "n vaut $n";
print_r($col_dates);
print_r($col2);
$z= array_combine ($col_dates, $col2);
print "<br >";
print_r($z);
asort($z);
print "<br >";
print_r($z);

?>
time() : un timestamp pour aller vite...

Mon soucis par rapport à ce code qui m'a bien aidé dans la compréhension de pas mal de choses, c'est que je n'arrive pas à faire le tableau qui va avec. Possible de me guider, m'aider ou autre svp pour ce foutu array qui me fait péter un câble ? :cry:

Re: Demande pour array

par bibi2410 » 29 oct. 2013, 05:50

J'ai donc essayé avec ce code d'affichage:
error_reporting(E_ALL);
extract($_POST);
$col_dates = array();
$n = count( $col2);
for ($i = 0; $i < $n; $i++)
{
        $col_dates[] = time()+(123*$i); 
}

// $array += array_combine(array1, array2);

$array3 = array_combine($col2, $col3);
		asort($col2);
		foreach($array3 as $z => $y){
			echo 'col2: ' . $z . ' -- col3: ' . $y . ' <br />';
				}
Mais c'est pire car ça ne se met pas dans l'ordre. :/

Re: Demande pour array

par bibi2410 » 28 oct. 2013, 23:09

Je viens de trouver cette ceci pour trier les tableaux ligne par ligne en fonction d'une colonne:
$array += array_combine(array1, array2);

Seulement je ne sais pas comment mélanger le tout à des array et au code donné par sirakawa. :/
Quelqu'un pour m'aider svp?

Re: Demande pour array

par bibi2410 » 28 oct. 2013, 13:56

la colonne 2 se met bien dans l'ordre, mais lorsque j'essai d'afficher la colonne 3 celle-ci se met aussi dans l'ordre. Hors il faudrait que les lignes entières se mette dans l'ordre en fonction de la colonne 2. :/

Exemple:

si on a:
colonne 2 | colonne 3
.....4.....|.....a
.....2.....|.....b
.....6.....|.....c

on obtienne:
.....2.....|.....b
.....4.....|.....a
.....6.....|.....c

Mais là j'obtiens 246 et abc (je sais pas si je me suis bien exprimé).

Re: Demande pour array

par bibi2410 » 28 oct. 2013, 11:52

ça m'a l'air de fonctionner sur le principe, je vais tenter de l'adapter à mon code ce soir ou demain et je repasse en donner des news. merci. :)

Re: Demande pour array

par sirakawa » 26 oct. 2013, 17:00

Simulation:
<html>
<form method = 'post' action = 'test.php'>
<table border='1'>
	<tr>
		<th>Colonne 2</th>
		<th>Colonne 3</th>
	</tr>
	<tr>
		<td><input type = 'text' name = 'col2[]' /></td>
		<td><input type = 'text' name = 'col3[]' /></td>
	</tr>
	<tr>
		<td><input type = 'text' name = 'col2[]' /></td>
		<td><input type = 'text' name = 'col3[]' /></td>
	</tr>	
		<tr>
		<td><input type = 'text' name = 'col2[]' /></td>
		<td><input type = 'text' name = 'col3[]' /></td>
	</tr>
</table>
<button type = 'submit'>traiter</button>
</form>
</html>
et début:
<?PHP
error_reporting(E_ALL);
extract($_POST);
$col_dates = array();
$n = count( $col2);
for ($i = 0; $i < $n; $i++)
{
	$col_dates[] = time()+(123*$i);	
}
print "n vaut $n";
print_r($col_dates);
print_r($col2);
$z= array_combine ($col_dates, $col2);
print "<br >";
print_r($z);
asort($z);
print "<br >";
print_r($z);

?>
time() : un timestamp pour aller vite...

Re: Demande pour array

par bibi2410 » 26 oct. 2013, 14:13

Pour n'afficher que le contenu j'ai remplacer "print_r" par un implode, donc good.

Concernant l'ordre des lignes par colonnes, j'ai remplacé:
array_multisort($lieu, SORT_ASC, $array2);
par:
array_multisort($test, $lieu, $trajet, $depart, SORT_ASC, $array2);

ça permet aux 4 colonnes d'être triées mais soucis, je crois que ça me les range par ordre croissant individuellement, alors que je souhaiterai quand la colonne 4 est triée, toutes les lignes de la colonne suivent. :/

Donc j'en suis là: comment trier toutes les ligne d'un coup en fonction d'une colonne ?

Re: Demande pour array

par bibi2410 » 26 oct. 2013, 13:18

Donc j'ai réussi à faire ceci, seulement 2 problème pour commencer:
1/ comment ne laisser QUE le texte ? (virer le array et les crochets et tout)
2/ j'ai tester de classer par la colonne "lieu", mais seulement cette colonne est classée. Hors je voudrais que le tri par colonne prenne en charge la ligne entière.

A noter que pour les tests j'ai pris des valeurs texte, Voici mon code actuel:
<?php
$array2 = array (
	array('test'=>'Test n°1', 'lieu'=>'Lieu n°1', 'trajet'=>'Durée n°1', 'depart'=>'Départ n°1' ),
	1 => array('test'=>'Test n°2', 'lieu'=>'Lieu n°2', 'trajet'=>'Durée n°2', 'depart'=>'Départ n°2' ),
	2 => array('test'=>'Test n°3', 'lieu'=>'Lieu n°3', 'trajet'=>'Durée n°3', 'depart'=>'Départ n°3' ),
	3 => array('test'=>'Test n°4', 'lieu'=>'Lieu n°4', 'trajet'=>'Durée n°4', 'depart'=>'Départ n°4' ),
	4 => array('test'=>'Test n°5', 'lieu'=>'Lieu n°5', 'trajet'=>'Durée n°5', 'depart'=>'Départ n°5' ),
	5 => array('test'=>'Test n°6', 'lieu'=>'Lieu n°6', 'trajet'=>'Durée n°6', 'depart'=>'Départ n°6' ),
	6 => array('test'=>'Test n°7', 'lieu'=>'Lieu n°7', 'trajet'=>'Durée n°7', 'depart'=>'Départ n°7' ),
	7 => array('test'=>'Test n°8', 'lieu'=>'Lieu n°8', 'trajet'=>'Durée n°8', 'depart'=>'Départ n°8' ),
	8 => array('test'=>'Test n°9', 'lieu'=>'Lieu n°9', 'trajet'=>'Durée n°9', 'depart'=>'Départ n°9' ),
	9 => array('test'=>'Test n°10', 'lieu'=>'Lieu n°10', 'trajet'=>'Durée n°10', 'depart'=>'Départ n°10' ),
	);



foreach($array2 as $key1 => $row1)
	{ $test[$key1]  = $row1['test']; }
foreach($array2 as $key2 => $row2)
	{ $lieu[$key2]  = $row2['lieu']; }
foreach($array2 as $key3 => $row3)
	{ $trajet[$key3]  = $row3['trajet']; }
foreach($array2 as $key4 => $row4)
	{ $depart[$key4]  = $row4['depart']; }

array_multisort($lieu, SORT_ASC, $array2); 
 
  echo "<TABLE cellpadding=5 cellspacing=0 align=center border=1>";
	echo "<TR>";
		echo "<TD colspan=4 ></TD>";
	echo "</TR>";
	echo "<TR>";
			echo "<TD>";
			print_r($test);
			echo "</TD>";
		echo "<TD>";
		print_r($lieu);
		echo "</TD>";
			echo "<TD>";
			print_r($trajet);
			echo "</TD>";
		echo "<TD>";
		print_r($depart);
		echo "</TD>";
	echo "</TR>";
  echo "</TABLE>";

?>
Voici ce que ça donne en image:

Image

Re: Demande pour array

par bibi2410 » 26 oct. 2013, 12:45

après même si ya des variables bidon c'est pas gênant je me debrouillerai plus tard: le principal c'est d'avoir la base.

Re: Demande pour array

par bibi2410 » 26 oct. 2013, 12:13

Voici quelques infos de correspondance si ça peut aider:

Colonne 1:
du texte
colonne 2:
v1 correspond à <?php echo $_POST['v1']; ?>
v2 correspond à <?php echo $_POST['v2']; ?>
v3 correspond à <?php echo $_POST['v3']; ?>
etc...
colonne 3:
t1 correspond à <? echo "".$my_strh1."";
                  @$date1 = getdate($h1);  ?>
t2 correspond à <? echo "".$my_strh2."";
                  @$date2 = getdate($h2);  ?>
t3 correspond à <? echo "".$my_strh3."";
                  @$date3 = getdate($h3);  ?>
colonne 4:
d1 correspond à ceci: echo strftime("%H:%M:%S",$a1);
d2 correspond à ceci: echo strftime("%H:%M:%S",$a2);
d3 correspond à ceci: echo strftime("%H:%M:%S",$a3);
etc...

Re: Demande pour array

par bibi2410 » 26 oct. 2013, 11:36

il manque quoi comme info ?

Re: Demande pour array

par moogli » 26 oct. 2013, 10:50

Salut,

On a pas assez de données pour t'aider correctement.

Tout ce que je peu te dire c'est que tu as forcément une relation entre les quatre données et que c'est ce qui va te permettre d'afficher des lignes cohérentes.

Par contre pour le tri tu va devoir créer une fonction de tri perso il n'en existe pas qui le font en php nativement.

@+

Re: Demande pour array

par bibi2410 » 26 oct. 2013, 10:44

En gros faire comme sur cette page mais en utilisant des données qui ne viennent pas d'une bdd: seebz