php - 在 PHP 中从一维数组创建二维矩阵的最有效方法

标签 php arrays multidimensional-array

给定一个字符串数组,例如 $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/

相关文章:

php - 使用模块编译 php 还是使用共享模块?

php - 如何在 CakePHP2 中缓存静态内容(css、图像、js 文件)?

php - 使用 SQL 查询多次重复 <select> 菜单

c++ - 向数组移动和添加元素

java - 为什么我的writefile()无法编译?

VBA - 直接使用括号分配多维数组

php - 带有 DOMDocument 的网页抓取工具

java - 在数组中输入两次相同的数字

c++ - 我的 park_car 功能有什么问题?

php - 使用 MySQL 中的键将数组的 JSON 数组创建为单个 JSON 对象