Page 1 sur 1

Tableau multidimensionnel ?

Posté : 18 oct. 2016, 15:33
par mbensoussan
bonjour,

Ma première question sur ce forum !

j'ai un tableau de valeur que j'ai fait de la sorte :

$product_family = array( 'Soft'=>'jus de fruits',
'Apéritif'=>array('anis','porto','liqueurs et crèmes'),
);

//mon produit 1 :
$type = 'Jus de fruits'

//j'aimerai donc que ma variable $categorie = "soft"
$categorie = array_search($type, $product_family )

//maintenant et la est la question, avec mon produit 2 :
$type = 'porto'

//comment trouver la catégorie auquel il appartient ?

J'espère avoir été claire ...

merci !

Re: Tableau multidimensionnel ?

Posté : 18 oct. 2016, 16:17
par fitnopk
Je suis débutant aussi, mais j'aurai quand même une façon de faire qui peut marcher.
Plutôt que de faire un array_search, tu peux faire un foreach sur ton 1er array.
foreach ($product_family as $key => $val) {
    if (is_array($val)) {
	foreach ($val as $val2) {
            if ($val2 === $type) {
		$categorie = $key;
		break;
            }
	}
    } elseif ($val === $type) {
	$categorie = $key;
	break;
    }
}
Il faudrait peut être une autre variable après lorsque tu break dans le 2eme foreach pour dire de break dans le 1er foreach
Après il existe probablement des façons plus propres et rapide, ça je laisse les pros t'expliquer :lol: Mais en attendant tu peux utiliser la mienne :)

Re: Tableau multidimensionnel ?

Posté : 18 oct. 2016, 16:20
par mbensoussan
oui j'avais tenté une solution comme celle-ci (mais la tienne est plus complète). j'essai de faire quelques tests...

Re: Tableau multidimensionnel ?

Posté : 18 oct. 2016, 16:36
par ynx
Salut,

En complément de la réponse de fitnopk qui répond exactement à la question :
- on peut ajouter un nombre entier après break pour indiquer le nombre de structures imbriquées à interrompre, ici 2 pour les deux boucles :
foreach ($product_family as $key => $val) {
    if (is_array($val)) {
        foreach ($val as $val2) {
            if ($val2 === $type) {
                $categorie = $key;
                break 2;
            }
        }
    } elseif ($val === $type) {
        $categorie = $key;
        break;
    }
}
- pour simplifier un peu, on peut également remplacer cette deuxième boucle par un in_array() :
foreach ($product_family as $key => $val) {
    if (is_array($val) && in_array($type, $val)) {
        $categorie = $key;
        break;
    } elseif ($val === $type) {
        $categorie = $key;
        break;
    }
}
Bonne journée,

Re: Tableau multidimensionnel ?

Posté : 18 oct. 2016, 16:46
par fitnopk
Oh c'est vrai qu'on peut donner une valeur à break j'avais zappé ça :D
Et effectivement ta version est plus jolie, faut que j'apprennes à compacter comme ça aussi xD

Re: Tableau multidimensionnel ?

Posté : 18 oct. 2016, 21:00
par mbensoussan
super merci !