将多维数组转换为类似矩阵的数组

时间:2017-08-07 14:07:48

标签: php multidimensional-array

我有以下数组:

$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阵列。

关于如何实现这一目标的任何想法?

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]);
    }
}
  • 我声明数组中有一个空数组。
  • 第一个foreach遍历主阵列以访问所有类别,无论其数量如何。
  • 第二个foreach遍历结果数组。
  • 第三个foreach - 或者不是,取决于类别是否包含多个或单个条目 - 迭代当前类别的每个条目,并在当前迭代的结果中合并仅包含当前类别的数组(来自{{1} })。合并将推入结果数组中。存储在$dst中的结果被假定为临时结果,并将与每个新值一起复制和完成,使它们逐渐包含每个类别中的一个条目。
  • $dst的每次迭代结束时,当前的临时结果将从数组中删除,因为它没有任何意义:如果foreach迭代它,那意味着它不完整。
  • 最后,$dst中剩下的唯一条目是那些没有被迭代的条目,这意味着每个条目的每个条目在创建时都会被考虑,这意味着它们是完整。

  • 我可能需要澄清。