Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/06/2011, 01h13   #1
Invité de passage
 
Inscription : novembre 2006
Messages : 10
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 10
Points : 1
Points : 1
Par défaut Tableau complexe à extraire

Bonjour,

J'ai un tableau un peu complexe (pour moi) dont je souhaiterais extraire les données pour en faire des listes de couples {spécificité,valeur} :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Array
(
    [1] => Array
        (
            [1] => (1,1)
            [2] => (1,2)
        )
 
    [2] => Array
        (
            [3] => (2,3)
        )
 
    [3] => Array
        (
            [4] => (3,4)
            [5] => (3,5)
        )
)
La structure de ce tableau est :
Code :
1
2
3
4
5
6
7
Array
(
    [Spécificité] => Array
        (
            [Valeur] => (Spécificité,Valeur)
        )
)
A partir du tableau ci-dessus, je souhaiterais obtenir des listes de couples (qui sont enfaite de simples chaînes des caractères) :
Code :
1
2
3
4
(1,1),(2,3),(3,4)
(1,2),(2,3),(3,4)
(1,1),(2,3),(3,5)
(1,2),(2,3),(3,5)
Je pense que l'exemple est assez parlant.

Je me suis lancé dans toute une succession de boucles foreach(), seulement je n'y arrive pas et difficulté supplémentaire : le nombre de couples par liste est infini (dans l'exemple, je n'en ai pris que 3).

Merci d'avance pour votre aide, là je sèche...
affro-jojo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 12h20   #2
Candidat au titre de Membre du Club
 
Inscription : septembre 2004
Messages : 53
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 53
Points : 14
Points : 14
Salut,

Un script à base de Foreach devrait résoudre ton probleme :
Code :
1
2
3
4
5
6
 
foreach ($ArrayPrincipal as $specificite) {
     foreach ($specificite as $valeur) {
          Echo $valeur.",";
     }
}
Le premier foreach parcourt le contenu de ton array principal
Le second parcourt la liste de tes spécificités, et pour chacune renvoie la valeur associée (pas la clé, mais bel et bien son contenu, soit ce que tu veux afficher de ce que j'ai compris).

Olif.
Olif_C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 12h37   #3
Membre régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 55
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 55
Points : 77
Points : 77
affro-jojo ne veut pas afficher son tableau mais extraire une combinaison de toutes les listes possibles ce qui devient légerement plus complexe. J'essaie de m'y atteler dans la journée
Avalion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 12h55   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Pour un thread relativement similaire, j'avais pondu un algo pour calculer le produit cartésien de plusieurs tableaux. Je pense que ça peut t'aider:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function array_cartesian_product () {
  if (!$c = func_num_args()) return array();
  if ($c == 1) {
    $r = array();
	foreach (func_get_arg(0) as $v) {
		$r[] = array($v);
	}
	return $r;
  }
 
  $args = func_get_args();
  $f = array_shift($args);
  $s = call_user_func_array('array_cartesian_product', $args);
  $r = array();
 
  foreach ($f as $v) {
    foreach ($s as $w) {
	  array_unshift($w, $v);
	  $r[] = $w;
	}
  }
 
  return $r;
}
Dans ton cas:
Code :
1
2
3
4
5
var_dump(array_cartesian_product(
  array("(1,1)", "(1,2)"),
  array("(2,1)"),
  array("(3,4)", "(3,5)")
));
Produit:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
array
  0 => 
    array
      0 => string '(1,1)' (length=5)
      1 => string '(2,1)' (length=5)
      2 => string '(3,4)' (length=5)
  1 => 
    array
      0 => string '(1,1)' (length=5)
      1 => string '(2,1)' (length=5)
      2 => string '(3,5)' (length=5)
  2 => 
    array
      0 => string '(1,2)' (length=5)
      1 => string '(2,1)' (length=5)
      2 => string '(3,4)' (length=5)
  3 => 
    array
      0 => string '(1,2)' (length=5)
      1 => string '(2,1)' (length=5)
      2 => string '(3,5)' (length=5)
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 12h57   #5
Membre régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 55
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 55
Points : 77
Points : 77
Voila la solution ;-)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$out = array();
$datas = array(array('(1,1)','(1,2)'),array('(2,3)'),array('(3,4)','(3,5)'));
 
foreach ($datas as $pos => $data) {
  // premier
  if (empty($out)) {
    $out = $data;
  } else {
    // Tableau temporaire
    $new = array();
    // Ajouter chaque couple a chaque liste deja existante au nouveau tableau
    foreach ($data as $couple) {
      for ($i=0;$i<count($out);$i++) {
	$new[] = $out[$i].','.$couple;
    };};
    // Mettre à jour le tableau 
    $out = $new;
};};
La sortie est alors

Code :
1
2
 $out :
Array ( [0] => (1,1),(2,3),(3,4) [1] => (1,2),(2,3),(3,4) [2] => (1,1),(2,3),(3,5) [3] => (1,2),(2,3),(3,5) )
Avalion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 13h15   #6
Candidat au titre de Membre du Club
 
Inscription : septembre 2004
Messages : 53
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 53
Points : 14
Points : 14
Merde, pour une fois que j'avais une réponse à une question posée

Après relecture, ma version semblait en effet trop simple, toutes mes confuses

Edit : Par contre, Avalion, les ";" apres les "}", c'est volontaire, erreur de ta part, utilité quelconque ? C'est une syntaxe que je n'avais jamais vu.
Olif_C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 13h26   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Mettre des ; à la suite des blocs ne gène pas mais ça ne fais absolument rien non plus...

Sûrement un résidu des éditions successives du script

@Avalion Je n'ai pas fais de bench mais je pense que mon algo est un poil plus rapide du fait de la récursivité. Mais sur un jeu d'entrée aussi léger, la différence n'est pas perceptible.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 14h52   #8
Invité de passage
 
Inscription : novembre 2006
Messages : 10
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 10
Points : 1
Points : 1
Merci à vous deux, j'ai utilisé la solution de Avalion car je n'arrive à utiliser la fonction de Benjamin :-(

A partir de ça :

Code :
$tableau = array($tableau1, $tableau2, $tableau3, ..., $tableauX);
Je ne sais pas faire ça :

Code :
array_cartesian_product($tableau1, $tableau2, $tableau3, ..., $tableauX)
affro-jojo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 15h02   #9
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Code :
call_user_func_array('array_cartesian_product', $tableau);
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 14h31   #10
Membre régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 55
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 55
Points : 77
Points : 77
@Benjamin :
oui c'est surement plus rapide a cause de ma triple boucle mais ne pas utiliser de fonction c'est sympa aussi

pour ce qui est des }; c'est une facon de coder qui me permet un débuggage assez simple grace à un framework perso
Avalion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 15h54   #11
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Citation:
Envoyé par Avalion Voir le message
@Benjamin :
oui c'est surement plus rapide a cause de ma triple boucle mais ne pas utiliser de fonction c'est sympa aussi

pour ce qui est des }; c'est une facon de coder qui me permet un débuggage assez simple grace à un framework perso
Wabon ? J'ai toujours pensé qu'une jolie fonction c'était bien mieux qu'un bloc de code... Bah après c'est les goûts et les couleurs.

Ton framework perso on peut y jeter un oeil ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 11h16   #12
Membre régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 55
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 55
Points : 77
Points : 77
Désolé mais mon framework appartient à la boite dans laquelle je suis stagiaire et dans les termes du contrat, je ne peux divulguer le framework :s
Pour info, la boite propose des elections professionnelles donc demande un minimum de sécurité
Avalion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 10h36   #13
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
D'accord

Si tu veux jeter un oeil au mien, je l'ai publié par là: http://code.google.com/p/php-axiom/
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h28.


 
 
 
 
Partenaires

Hébergement Web