我有以下数组:
$array = array(
array("2018","2019"),
"Jan",
array("France","Germany")
);
我需要一个跨越阵列所有元素的矩阵; e.g:
array(
array("2018","Jan","France"),
array("2018","Jan","Germany"),
array("2019","Jan","France"),
array("2019","Jan","Germany")
);
意思是,2 x 2 x 1阵列
但这可能是因为我有更多的元素是或不是数组:
$array = array(
array("2018","2019"),
"Jan",
array("France","Germany"),
array("prod1","prod2","prod3"),
'Act'
);
在这种情况下,我最终会获得2 x 2 x 1 x 4 x 1阵列。
关于如何实现这一目标的任何想法?
答案 0 :(得分:1)
这就是你要找的东西吗?
$dst = array(array());
foreach ($array as $idx => $val) {
foreach ($dst as $tmp_idx => $tmp_array) {
if (is_array($val)) {
foreach ($val as $sub_idx => $sub_val) {
$dst[] = array_merge($dst[$tmp_idx], array(count($dst[$tmp_idx]) => $sub_val));
}
} else {
$dst[] = array_merge($dst[$tmp_idx], array(count($dst[$tmp_idx]) => $val));
}
unset($dst[$tmp_idx]);
}
}
$dst
中的结果被假定为临时结果,并将与每个新值一起复制和完成,使它们逐渐包含每个类别中的一个条目。$dst
的每次迭代结束时,当前的临时结果将从数组中删除,因为它没有任何意义:如果foreach迭代它,那意味着它不完整。最后,$dst
中剩下的唯一条目是那些没有被迭代的条目,这意味着每个条目的每个条目在创建时都会被考虑,这意味着它们是完整。
我可能需要澄清。