У меня только что была эта проблема. У меня есть многомерный массив ($ 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
}
Я надеюсь, что это может быть полезным для всех.
Ты можешь использовать extract
функция, которая будет автоматически создавать новые переменные на основе значений ключа:
extract($varianti);
var_dump($pa_colore);
ты можешь использовать 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
Вы можете просто получить их по ключу и сохранить их в переменной.
$array1 = $varianti["pa_taglia"];
$array2 = $varianti["pa_colore"];
var_dump($array1);
var_dump($array2);
Здесь я получил все глобальные переменные, используя 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/>";
}