Bonjour,
J'ai une problèmatique que je n'arrive pas à résoudre. Je veux combiner plusieurs tableaux pour obtenir un tableau multi-dimensionnel avec toutes les valeurs sous formes de branches.
Un exemplej'ai 3 tableaux
$step1 = [1, 2];
$step2 = [3, 4, 5];
$step3 = [6, 7];
ce que je veux obtenir, de façon dynamique. Dans mon exemple, il y 3 tableaux, mais dans mon projet, je peux monter à 10 tableaux dans le même genre.
$combine = [
1 => [
3 => [
6, 7
],
4 => [
6, 7
],
5 => [
6, 7
]
],
2 => [
3 => [
6, 7
],
4 => [
6, 7
],
5 => [
6, 7
]
]
];
En gros, chaque tableau doit fusionner avec les éléments des tableaux du dessus.
Je n'ai pas de bout de code à présenter, j'ai essayé plusieurs approches sans arriver à mon résultat...
Si quelqu'un à déjà eu cette problèmatique, ou une idée d'approche.
Merci pour votre aide.
J'ai fait autrement, problèmatique que je n'ai pas réussi à résoudre dans ce sens.
Utilise des boucles foreach comme ceci
$step1 = [1, 2];
$step2 = [3, 4, 5];
$step3 = [6, 7];
$combine = [];
foreach ($step1 as $v1) {
$combine[$v1] = $step2;
foreach ($step2 as $v2) {
$combine[$v1][$v2] = $step3;
}
}
Je ne connais pas d'autres moyen pour du native comme ça, si tu souhaite faire ça de façon à ce que ça prend tout nombre de step, il faudrai que tu t'aime d'une librairie php pour générer des tableaux sous forme de chaîne de caractères :
// Une classe permettant de faire ceci
$combine = [
1 => [
3 => [
6, 7
]
]
];
// En utilisant ce genre de fonction
$obj->getArray("1.3", [6, 7]);
Je ne sais pas si tu vois ou je veux en venir.
Merci Simon pour ta réponse, mais cette technique n'est pas "dynamique".
Imagine que je rajoute 2 nouveaux tableaux, il faudra recoder la fonction, et ce n'est pas le but.
Mon idée, c'est que peut importe le nombre de tableaux, le rendu soit le même que ci-dessus.
Voilà un début de code pour montrer un peu plus ce que je cherche. Le problème, c'est que je n'arrive pas à aller plus loin que le 2nd niveau.
$ar1 = [752, 882];
$ar2 = [860, 786, 795];
$ar3 = [783, 769, 879, 849, 880];
$steps = [$ar1, $ar2, $ar3];
foreach ($steps as $step) {
Step::setAutomated($step, count($steps));
}
class Step
{
private static $automated = [];
/**
* @param $products
*/
public static function setAutomated($products, $nbSteps)
{
if (empty(self::$automated)) {
foreach ($products as $product) {
self::$automated[$product] = [];
}
} else {
self::recursiveAutomatedSteps($products, self::$automated, $nbSteps);
}
}
/**
* @param $products
* @param array $selfAutomated
*
* @return array
*/
private static function recursiveAutomatedSteps($products, $selfAutomated = [], $nbSteps)
{
foreach ($selfAutomated as $id => $children) {
if (empty($children)) {
foreach ($products as $product) {
$selfAutomated[$id][$product] = [];
}
} else {
self::recursiveAutomatedSteps($products, $selfAutomated[$id], $nbSteps);
}
}
self::$automated = $selfAutomated;
}
}
Regarde cette librairie php-dot-notation, elle te permet de gérer la profondeur de t'es tableaux en utilisant du string, à toi de gérer tes boucles avec pour générer t'es profondeur en string ;)