Разбить многомерный массив на его sub_arrays

У меня только что была эта проблема. У меня есть многомерный массив ($ varianti), который выглядит так:

Array
(
[pa_taglia] => Array
(
[0] => l
[1] => m
)

[pa_colore] => Array
(
[0] => blu
[1] => giallo
[2] => rosso
)

)

Мне нужно получить разные массивы для каждого вложенного массива, поэтому мне нужен такой результат:

Array
(
[0] => l
[1] => m
)
Array
(
[0] => blu
[1] => giallo
[2] => rosso
)

Основная проблема заключается в том, что я могу получить столько вложенных массивов, сколько нужно (это для моего плагина Woocommerce для создания product_variations из атрибутов), поэтому он должен быть гибким.

Вот код, который я придумал (через 2 часа …):

$keys = array_keys($varianti);//get the main keys

//split multidimensional array in sub arrays
foreach ($keys as $key=>$val){
$nr_var[$val]= count($varianti[$keys[$key]]);//create array such as array('key1'=> qty1, 'key2'=> qty2);
$$val = $varianti[$keys[$key]];//create a variable variable from key
}
print_r($nr_var);
foreach ($nr_var as $chiave=>$valore){
print_r($$chiave);//retrieve values calling variable variable
}

Я надеюсь, что это может быть полезным для всех.

0

Решение

Ты можешь использовать extract функция, которая будет автоматически создавать новые переменные на основе значений ключа:

extract($varianti);
var_dump($pa_colore);
1

Другие решения

ты можешь использовать extract() функция PHP. эта функция извлекает массив в переменном формате.

Считайте, что это в $main_array

Array
(
[pa_taglia] => Array
(
[0] => l
[1] => m
)

[pa_colore] => Array
(
[0] => blu
[1] => giallo
[2] => rosso
)

)

extract($main_array);

print_r($pa_taglia);
print_r($pa_colore);

Для более подробной информации обратитесь http://php.net/manual/en/function.extract.php

0

Вы можете просто получить их по ключу и сохранить их в переменной.

$array1 = $varianti["pa_taglia"];
$array2 = $varianti["pa_colore"];

var_dump($array1);
var_dump($array2);
0

Здесь я получил все глобальные переменные, используя get_defined_vars(); вашей программы, которую вы, очевидно, будете многомерным массивом.
После этого я получаю доступ к их ключу с array_keys($orignalArr);,
Затем, наконец, отобразите каждый подмассив по значению ключа.

$orignalArr = get_defined_vars();
$keyArr=array_keys($orignalArr);
$arrCount=sizeof($keyArr);
echo  "Values of keys<br><br>";
for($i=0;$i<$arrCount;$i++)
{
echo "<br/>";
print_r($keyArr[$i]);
echo "==";
print_r($orignalArr[$keyArr[$i]]);
echo "<br/>";
}
0
По вопросам рекламы [email protected]