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

在PHP中从一维数组创建二维矩阵的最有效方法,php,arrays,multidimensional-array,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, $valu

给定字符串数组,例如$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);
函数矩阵($m,$n,$value){
返回数组填充(0,$m,数组填充(0,$n,$value));
}//创建一个$value的矩阵(m,n)
$a=数组(“零”、“一”、“猫”);
$b=矩阵(计数($a),计数($a),“-”);//创建$b,用“-”填充
对于($i=0;$i
实际上$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
中项目的索引符合以下两种条件之一:

在我看来,“不会让服务器屈服”的方法可以避免函数调用,也不会使用递归,即使两者在代码方面看起来都更干净。不管怎样,这都是一个相当简单的问题

首先,我们创建破折号数组:

$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
中项目的索引符合以下两种条件之一:


我不知道它是否更有效(你必须用
microtime()
来衡量它)

使用可能更容易书写或理解的语言:

$a = array("zero", "one", "cat");
$elements=count($a);
//we create the matrix and fill it with "-"
$matrix=array_fill(0,$elements,array_fill(0,$elements,"-");)
//now we have a matrix $elements x $elements (in this case will be 3x3) filled by "-"
// -  -  -
// -  -  -
// -  -  -
现在我们把数字

for($i = 0; $i < $elements; $i++){
  $matrix[$i][$i] = $a[$i];
}
($i=0;$i<$elements;$i++)的
{
$matrix[$i][$i]=$a[$i];
}

我不知道它是否更有效(你必须用
microtime()测量它)

使用可能更容易书写或理解的语言:

$a = array("zero", "one", "cat");
$elements=count($a);
//we create the matrix and fill it with "-"
$matrix=array_fill(0,$elements,array_fill(0,$elements,"-");)
//now we have a matrix $elements x $elements (in this case will be 3x3) filled by "-"
// -  -  -
// -  -  -
// -  -  -
现在我们把数字

for($i = 0; $i < $elements; $i++){
  $matrix[$i][$i] = $a[$i];
}
($i=0;$i<$elements;$i++)的
{
$matrix[$i][$i]=$a[$i];
}

闻起来像是家庭作业,但我喜欢“你解释你的版本就像我8岁一样。”xDI可以保证这不是家庭作业;太老了。从字里行间看,我感觉你是在暗示这是一个太简单的问题,还是我应该粗暴地强迫自己通过的问题?为我辩护,PHP不是我的母语,我发现多维数组非常混乱。闻起来像是家庭作业,但我喜欢“你解释你的版本就像我8岁一样。”xDI可以保证这不是家庭作业;太老了。从字里行间看,我感觉你是在暗示这是一个太简单的问题,还是我应该粗暴地强迫自己通过的问题?为我辩护,PHP不是我的母语,我发现多维数组非常令人困惑。@Explosion Pills在我之前写道:(如果我有足够的声誉,我会给你一个向上投票的机会。自我提醒-稍后再来。@Explosion Pills在我之前写道:(如果我有足够的声誉,我会给你一个向上投票的机会。自我提醒-稍后再来)。