【问题标题】:PHP 2D array for loopPHP 2D 数组 for 循环
【发布时间】:2021-05-21 04:25:55
【问题描述】:

我想使用循环创建二维数组。数组应如下所示:

[00,01,02]
[10,11,12]
[20,21,22]

那我要在这个数组的主对角线上搜索。

我知道我需要两个 for 循环,但我不知道如何编写它。我尝试过这样的事情。我知道代码不起作用。我不知道如何处理它。

for ($i = 0; $i <= $size; $i++){   
    $matrix = [];
    for ($j = 0; $j <= $size; $j++){
        $matrix[i][j] = array ($i;$j);
    }
}

对于我的第二个任务,我认为我应该使用 foreach 和条件。像这样?

    foreach ($matrix as $key) {
        if ($i==$j) {
            ...
        }
    }

谢谢!

【问题讨论】:

  • 主对角线是什么意思?你能解释更多吗?你希望在循环之后得到什么?
  • 您是否在问多个问题?这将要求您的问题被关闭为太宽泛。语法中的拼写错误是关闭此页面的另一个原因。
  • 数组变量$matrix = []; 的初始化也属于第一个循环之外,而不是其中 - 您不想用一直是空数组。而array ($i;$j) 只是没有意义的幻想语法。如果您只是想在此处将两个计数器值相互连接,请执行以下操作:$i . $j

标签: php arrays loops for-loop multidimensional-array


【解决方案1】:

问题是您将 $matrix = []; 中每次迭代的 $matrix 重置为一个空数组。您的语法 (array ($i;$j)) 也不正确。您需要在遍历数组之前进行初始化。下面的代码将为您生成所需的数组。

<?php
// Generate array
$lastNumber = 2;
$matrix = [];
for ($i = 0; $i <= $lastNumber; $i++) {
    for ($j = 0; $j <= $lastNumber; $j++) {
        $matrix[$i][$j] = $i.$j;
    }
}

您不需要执行 if 条件来循环遍历对角线。您知道确切的大小和/或位置。

// Loop through diagonal
for ($pos = 0; $pos <= $lastNumber; $pos++) {
    // do something with $matrix[$pos][$pos]
}

【讨论】:

    【解决方案2】:

    如果我理解正确的话...试试这样的

    $array = [];
    $j = 0;
    for($i = 0; $i < 100; $i++) {
    if($i % 10 == 0) {
        $j++;
    }    
     $array[$j][] = $i;
    
     }
    print("<pre>".print_r($array,true)."</pre>");
    

    将创建:

     Array
    (
        [1] => Array
            (
                [0] => 0
                [1] => 1
                [2] => 2
                [3] => 3
                [4] => 4
                [5] => 5
                [6] => 6
                [7] => 7
                [8] => 8
                [9] => 9
            )
    
        [2] => Array
            (
                [0] => 10
                [1] => 11
                [2] => 12
                [3] => 13
                [4] => 14
                [5] => 15
                [6] => 16
                [7] => 17
                [8] => 18
                [9] => 19
            )
    
        [3] => Array
            (
                [0] => 20
                [1] => 21
                [2] => 22
                [3] => 23
                [4] => 24
                [5] => 25
                [6] => 26
                [7] => 27
                [8] => 28
                [9] => 29
            )
    
        [4] => Array
            (
                [0] => 30
                [1] => 31
                [2] => 32
                [3] => 33
                [4] => 34
                [5] => 35
                [6] => 36
                [7] => 37
                [8] => 38
                [9] => 39
            )
    
        [5] => Array
            (
                [0] => 40
                [1] => 41
                [2] => 42
                [3] => 43
                [4] => 44
                [5] => 45
                [6] => 46
                [7] => 47
                [8] => 48
                [9] => 49
            )
    
        [6] => Array
            (
                [0] => 50
                [1] => 51
                [2] => 52
                [3] => 53
                [4] => 54
                [5] => 55
                [6] => 56
                [7] => 57
                [8] => 58
                [9] => 59
            )
    
        [7] => Array
            (
                [0] => 60
                [1] => 61
                [2] => 62
                [3] => 63
                [4] => 64
                [5] => 65
                [6] => 66
                [7] => 67
                [8] => 68
                [9] => 69
            )
    
        [8] => Array
            (
                [0] => 70
                [1] => 71
                [2] => 72
                [3] => 73
                [4] => 74
                [5] => 75
                [6] => 76
                [7] => 77
                [8] => 78
                [9] => 79
            )
    
        [9] => Array
            (
                [0] => 80
                [1] => 81
                [2] => 82
                [3] => 83
                [4] => 84
                [5] => 85
                [6] => 86
                [7] => 87
                [8] => 88
                [9] => 89
            )
    
        [10] => Array
            (
                [0] => 90
                [1] => 91
                [2] => 92
                [3] => 93
                [4] => 94
                [5] => 95
                [6] => 96
                [7] => 97
                [8] => 98
                [9] => 99
            )
    
    )
    

    而不是像这样循环:

    $j = 0;
    $finalArray = [];
    foreach($array as $arr) {
        $finalArray[] = $arr[$j];
        $j++;
    }
    print("<pre>".print_r($finalArray,true)."</pre>");
    

    然后你会解决这个问题:

    Array
    (
        [0] => 0
        [1] => 11
        [2] => 22
        [3] => 33
        [4] => 44
        [5] => 55
        [6] => 66
        [7] => 77
        [8] => 88
        [9] => 99
    )
    

    【讨论】:

      猜你喜欢
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2019-10-16
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      相关资源
      最近更新 更多