2012-12-04 50 views
2

一维数组给出一个字符串数组,如$一个创建一个二维矩阵:最有效的方法来从PHP

$a = array("zero", "one", "cat"); 

我期待创建数组$ B,填写“沿对角线“从$一个值:

$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); 

在实践$一个将是相当大的,所以我在寻找一种方法W这是将服务器瘫痪的最低机会。

(如果你解释你的版本,好像我是8岁获得额外的感谢。)

+0

气味像功课,但我喜欢“你解释你的版本,好像我是8岁。' xD –

+0

我可以承诺这不是作业;太旧了。在这两行之间进行阅读,我觉得你是在暗示这是一个太简单的问题,或者是我应该蛮横的东西 - 强迫自己的方式?在我的辩护中,PHP不是我的母语,我发现多维数组很混乱。 –

回答

2

,在我看来,“不带服务器瘫痪”将避免函数调用,并会还没有一种方法,使用递归,即使两者在代码方面看起来更干净。无论哪种方式,这都是一个相当简单的问题。

首先,我们创建了短线阵列:

$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; 
} 
1

我不知道,如果是更有效的(你有microtime()来衡量它)。

使用Array Fill也许它更容易编写或理解:

$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]; 
} 
+0

@Explosion Pills在我之前写道:( –

+0

如果我有足够的声望,我会给你一个upvote。注意自我 - 以后再回来。 –