[php array] 2 dimensions / 3 colonnes

Résolu
Bonjour,

je voudrais faire un tableau php à deux dimensions avec trois colonnes : clé, value1, value2.
$a = array(1=>'value1','2'=>'Second'); (comme ça mais avec deux valeurs liées à la clé)
Est ce possible et si oui comment ?

Ensuite si j'ai un tableau de ce type :
1 | tom | moto
2 | tom | voiture
3 | yoan | moto

Est ce que je peux faire la somme selon une des colones value ?
exemple somme 'moto' = 2...

Merci

Edouard

4 réponses

  1. Impossible directement.
    Choix de replis
    - 2 tableaux avec même indexation
    prim = array( 1=>'tom',2=>'tom',3=>'yoan');
    seco = array( 1=>'moto',2=>'voiture',3=>'moto');

    - 1 tableau contenant des sous-tableaux
    prim = array(
    1=> array('tom','moto'), 2=>array('tom','voiture'), 3=>array('yoan','moto')
    );
    1. Très clair. Merci.

      Sinon, existe-t-il une fonction pour comptabiliser le nombre d'enregistrements similaires dans mon tableau ? un peu comme un count sql ?

      par exemple 2 pour tom ou pour moto.
  2. count(array_values($array))

    Mais si ça doit être appliqué au cas présenté:
    cas des 2 tableaux: 2,2

    cas du tableau contenant des sous-tableaux: 3
    1. Bonjour,

      Merci pour la fonction count.

      A priori je m'orient vers 2 tableaux à 2 dimensions (key autoincrémentée et value string).

      Donc la solution du count me semble bonne.

      Par contre existe-t-il une autre fonction qui fassse l'équivalent de select distinct (sql) pour isoler toutes les values identiques ? (et ensuite dénombrer avec count combien de fois on les retrouve) ?

      Merci encore

      Edouard
      1. Salut,

        Pour ce qui passeraient par là, voici les solutions adoptées :

        2 tableaux à 2 dimensions.

        Pour éviter de compter et de faire un select distinct j'ai inversé les clé et valeurs :

        les données importantes sont stockées comme clé et à chaque occurence, j'incrémente la valeur de 1.
        -> chaque clé est unique (remplace le select distinct)
        -> j'aditionne au fur et à mesure (pas de count)

        if (array_key_exists($key, $tableau1)) {
        // cette clé est déjà présente dans le tableau
        // on incrément sa valeur de 1
        $tableau1[$key] += 1;
        } //fin if
        // si le tableau ne contient pas cette clé
        else {
        $tableau1[$key] = 1;
        } // fin else

        Ensuite pour présenter mes données par ordre d'importance j'ai utilisé cette fonction :

        arsort($tableau1);
        foreach($tableau1as $key=> $value){
        echo "$key ($value)<br />";
        } // fin foreach

        Merci pour l'aide et à plus.

        Edouard
        www.promete.fr