PHP 2D 数组 for 循环

时间:2021-02-18 08:29:41

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

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

[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 和 condition。像这样吗?

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

谢谢!

2 个答案:

答案 0 :(得分:0)

问题是您将 $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]
}

答案 1 :(得分:0)

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

$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
)
相关问题