给定一个字符串数组,例如 $a:
$a = array("zero", "one", "cat");
我正在创建数组 $b,“沿对角线”填充 $a 中的值:
$b[0] = ["zero", "-", "-"]
$b[1] = ["-", "one", "-"]
$b[3] = ["-", "-", "cat"]
到目前为止,我已经:
function matrix($m, $n, $value) {
return array_fill(0, $m, array_fill(0, $n, $value));
} // create a matrix (m,n) of $value
$a = array("zero", "one", "cat");
$b = matrix(count($a),count($a),"'-'"); // create $b, filled with '-'
for($i = 0; $i < count($a); $i++){
$b[$i][$i] = $a[$i];
} // fill matrix b with strings from a, along the diagonal
print_r($b);
实际上,$a 会非常大,因此我正在寻找一种使服务器崩溃的可能性最小的方法。
(如果你像我 8 岁一样解释你的版本,我会额外感谢。)
最佳答案
在我看来,“不会让服务器屈服”的方法将避免函数调用,也不会使用递归,尽管两者在代码方面看起来可能更干净。不管怎样,这是一个相当简单的问题。
首先,我们创建破折号数组:
$dashes = array_fill(0, count($a), array_fill(0, count($a), '-'));
您可能会注意到基于尺寸的模式:
0,0 1,0 2,0
0,1 1,1 2,1
0,2 1,2 2,2
具体来说,X 和 Y 坐标沿对角线匹配。这很方便,因为我们只需要知道其中一个就可以知道要插入到破折号数组中的槽位。 $a
中项目的索引符合以下任一条件(以及两者):
foreach ($a as $num => $item) {
$dashes[$num][$num] = $item;
}
关于php - 在 PHP 中从一维数组创建二维矩阵的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13710866/