2

$a などの文字列の配列が与えられた場合:

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

$a からの値を「対角線に沿って」入力した配列 $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);

実際には $a は非常に大きくなるため、サーバーが停止する可能性が最も低い方法を探しています。

(私が 8 歳であるかのようにバージョンを説明していただければ、さらに感謝いたします。)

4

2 に答える 2

2

効率が良いかどうかはわかりません(で測定する必要があります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];
}
于 2012-12-04T20:20:43.660 に答える
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;
}
于 2012-12-04T20:14:00.687 に答える