0

PHPで 2 つの多次元配列の合計を実装しようとしていますが、使用すると、管理している 2 つの m 次元配列のインデックスの間で本当に迷子になります。foreach

両方のアレイに正しくアクセスするにはどうすればよいですか?

function sumaMatriz($matrix1, $matrix2){
            echo "<table width=\"200\" border=\"1\">";

            foreach($matrix1 as $row1 =>$rValue1){
                foreach ($matrix2 as $row2 => $rValue2) {
                    echo "<tr>";
                    foreach($rValue1 as $col1 =>$cValue1){
                        foreach ($rValue2 as $col2 => $cValue2) {
                            echo "<td>".$cValue1+$cValue2."</td>";
                        }
                    }
                    echo "</tr>";
                }
            }
            echo "</table>";
}

私は次のように定義$m1します$m2

$m1 = array (array (rand(0,100), rand(0,100), rand(0,100)), 
         array (rand(0,100), rand(0,100), rand(0,100)), 
         array (rand(0,100), rand(0,100), rand(0,100)), 
         array (rand(0,100), rand(0,100), rand(0,100))
        );


$m2 = array (array (rand(0,100), rand(0,100), rand(0,100)), 
         array (rand(0,100), rand(0,100), rand(0,100)), 
         array (rand(0,100), rand(0,100), rand(0,100)), 
         array (rand(0,100), rand(0,100), rand(0,100))
        );

これは私の出力です。最初に表示された 2 つの配列は、関数への入力です。最後のテーブルは問題のあるテーブルで、単一の行として表示されています。

私が得ているもの

したがって、結果の HTML は次のようになります。

<html>
    <head>
        <title>
        Novatos del PHP
        </title>
    </head>

    <body> <center>



    <h2>Matriz 1</h2><table width="200" border="1"><tr><td>58</td><td>49</td><td>90</td></tr><tr><td>83</td><td>70</td><td>13</td></tr><tr><td>21</td><td>1</td><td>69</td></tr><tr><td>56</td><td>73</td><td>39</td></tr></table><br><h2>Matriz 2</h2><table width="200" border="1"><tr><td>31</td><td>35</td><td>86</td></tr><tr><td>2</td><td>86</td><td>99</td></tr><tr><td>98</td><td>16</td><td>40</td></tr><tr><td>99</td><td>35</td><td>1</td></tr></table><br><h2>Suma de matrices</h2><table width="200" border="1"><tr>31</td>35</td>86</td>31</td>35</td>86</td>31</td>35</td>86</td></tr><tr>2</td>86</td>99</td>2</td>86</td>99</td>2</td>86</td>99</td></tr><tr>98</td>16</td>40</td>98</td>16</td>40</td>98</td>16</td>40</td></tr><tr>99</td>35</td>1</td>99</td>35</td>1</td>99</td>35</td>1</td></tr><tr>31</td>35</td>86</td>31</td>35</td>86</td>31</td>35</td>86</td></tr><tr>2</td>86</td>99</td>2</td>86</td>99</td>2</td>86</td>99</td></tr><tr>98</td>16</td>40</td>98</td>16</td>40</td>98</td>16</td>40</td></tr><tr>99</td>35</td>1</td>99</td>35</td>1</td>99</td>35</td>1</td></tr><tr>31</td>35</td>86</td>31</td>35</td>86</td>31</td>35</td>86</td></tr><tr>2</td>86</td>99</td>2</td>86</td>99</td>2</td>86</td>99</td></tr><tr>98</td>16</td>40</td>98</td>16</td>40</td>98</td>16</td>40</td></tr><tr>99</td>35</td>1</td>99</td>35</td>1</td>99</td>35</td>1</td></tr><tr>31</td>35</td>86</td>31</td>35</td>86</td>31</td>35</td>86</td></tr><tr>2</td>86</td>99</td>2</td>86</td>99</td>2</td>86</td>99</td></tr><tr>98</td>16</td>40</td>98</td>16</td>40</td>98</td>16</td>40</td></tr><tr>99</td>35</td>1</td>99</td>35</td>1</td>99</td>35</td>1</td></tr></table>

     </center> </body>

</html>
4

2 に答える 2

2

これはテストされていません:

function sumaMatriz($matrix1, $matrix2){
            echo "<table width=\"200\" border=\"1\">";

            foreach($matrix1 as $row1 =>$rValue1){
                    echo "<tr>";
                    foreach($rValue1 as $col1 =>$cValue1)
                            echo "<td>".($cValue1+$matrix2[$row1][$col1])."</td>";
                    echo "</tr>";
            }
            echo "</table>";
}

基本的な考え方は、最大で 2 つのループのみを使用する必要があるということです。1 つは行用、もう 1 つは列用です。$row1 と $col1 が数値インデックスの場合、これらを使用して $matrix2 内の値にも直接アクセスできるはずです。

これが機能しない場合は、$matrix1 と $matrix2 を定義/設定する方法を投稿してください。

于 2013-08-22T00:56:18.010 に答える
1

現在発生している問題は、文字列の連結と整数の加算が混在しているためです。以下を使用すると、表に数字が表示されますが、アルゴリズムが間違っていると思います。

//  Make sure integer addition happens before concatenation
echo "<td>". ($cValue1+$cValue2) ."</td>"
于 2013-08-22T00:48:08.540 に答える