i have this array structure and i want to create other array structure with that:
JavaScript
x
array (size=7)
0 =>
array (size=9)
0 => string 'Dorado' (length=6)
1 => string '64GB' (length=4)
2 => string 'Plastico' (length=8)
1 =>
array (size=9)
0 => string 'Blanco' (length=6)
1 => string '32GB' (length=4)
2 => string 'Plastico' (length=8)
2 =>
array (size=9)
0 => string 'Blanco' (length=6)
1 => string '64GB' (length=4)
2 => string 'Madera' (length=6)
3 =>
array (size=9)
0 => string 'Verde' (length=5)
1 => string '64GB' (length=4)
2 => string 'Madera' (length=6)
4 =>
array (size=9)
0 => string 'Azul' (length=4)
1 => string '128GB' (length=5)
2 => string 'Cristal' (length=7)
5 =>
array (size=9)
0 => string 'Azul' (length=4)
1 => string '128GB' (length=5)
2 => string 'Plastico' (length=8)
6 =>
array (size=9)
0 => string 'Azul' (length=4)
1 => string '64GB' (length=4)
2 => string 'Cristal' (length=7)
Each array item have a group of characteristics like:
JavaScript
0 => string 'Dorado' (length=6)
1 => string '64GB' (length=4)
2 => string 'Plastico' (length=8)
.
0 => string 'Azul' (length=4)
1 => string '128GB' (length=5)
2 => string 'Cristal' (length=7)
I need an array that have this values like
Azul=>64GB=>Plastico 128GB=>Cristal
if sub item repeats only write the children value
Azul=>64GB=>Cristal Only adds Cristal because 64GB exists
I have this code in php:
JavaScript
foreach ($arrCaracteristicas as $itemMadre => $valueMadre) {
$NombreNodo = $valueMadre[0];
if ($NumeroCaracteristicas > 1) {
for ($i = 1; $i <= $NumeroCaracteristicas - 1; $i++) {
$NombreCaract = $valueMadre[$i];
echo "$NombreNodo: $NombreCaract <br>";
array_push( $arrSelectMain[$NombreNodo], $NombreCaract);
if (!isset($arrSelectMain[$NombreNodo][$NombreCaract])) {
//$arrSelectMain[$NombreNodo]["d"] = $NombreCaract;
}
}
}
}
Where $arrCaracteristicas have the long array, and $arrSelectMain have the first level of the array keys:
Code of first level:
JavaScript
foreach ($arrCaracteristicas as $item => $value) {
$arrSelectMain[$value[0]] = $value[0];
}
asort($arrSelectMain);
$arrSelectMain = array_unique($arrSelectMain);
This is an image with structure that i want: https://ibb.co/Q8k198Y
If somebody can help me i will invite a beer in paypal 🙂
Advertisement
Answer
This should work, first separate the array into columns and then loop over the items.
JavaScript
$first = array_column($items, 0);
$second = array_column($items, 1);
$third = array_column($items, 2);
$output = [];
for ($i = 0; $i < count($first); $i++) {
$output[$first[$i]][$second[$i]][] = $third[$i];
}
Have a look at the sample