#php #arrays
#php #массивы
Вопрос:
у меня есть эта структура массива, и я хочу создать другую структуру массива с этим:
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)
Каждый элемент массива имеет группу характеристик, таких как:
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)
Мне нужен массив, который имеет такие значения, как
Azul=> 64 ГБ => Plastico 128 ГБ => Cristal
если подпункт повторяется, записывайте только дочернее значение
Azul => 64GB => Cristal добавляет Cristal только потому, что 64GB существует
У меня есть этот код на php:
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;
}
}
}
}
Где $arrCaracteristicas имеют длинный массив, а $arrSelectMain имеют ключи первого уровня массива:
Код первого уровня:
foreach ($arrCaracteristicas as $item => $value) {
$arrSelectMain[$value[0]] = $value[0];
}
asort($arrSelectMain);
$arrSelectMain = array_unique($arrSelectMain);
Это изображение со структурой, которую я хочу:
https://ibb.co/Q8k198Y
Если кто-нибудь может мне помочь, я приглашу пиво через PayPal 🙂
Комментарии:
1. можете ли вы опубликовать точный образец входных данных и точный результат, который вы хотите получить за это?
Ответ №1:
Это должно сработать, сначала разделите массив на столбцы, а затем выполните цикл по элементам.
$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];
}
Взгляните на образец
Комментарии:
1. Вау, это работает: D, у меня есть два вопроса, во-первых: как я могу получить случайное количество предметов, например, в некоторых случаях больше или меньше уровней, я могу получить количество предметов, как я могу это сделать? пришлите мне свой paypal, чтобы пригласить вас на пиво!
2. Спасибо за предложение, но для меня достаточно проголосовать и принять ответ. 🙂 Извините, я не совсем понимаю ваши последующие вопросы. Я просто приведу их здесь, может быть полезно, для получения случайного числа от 1 до 5, которое вы можете использовать
mt_rand(1,5)
. Для получения подсчета используется функцияcount()
;3. Да, конечно, но я не случайное число значения, это случайное число элементов, например: $first = array_column($items, 0); $ second = array_column($items, 1); и так далее, это ряд переменных
4. Может быть, это?
count($output['Azul']['128GB']);
он вернул бы 25. Ну, пока первые три в каждом из ваших массивов создаются одинаковым образом, 4-й, 5-й и остальные элементы просто игнорируются в предоставленном решении. Если вы хотите охватить 4-й уровень, просто переместитесь
$third[$i]
в ключ массива и используйте$fourth[$i]
в качестве значения.