更改多维数组 php 的值


Changing values of multidimensional array php

这是我第一次在php中使用多维数组。我需要更改每个子数组中的第二个数字。

我想要的是检查数组中的 Id 是否与数据库中的 Id 匹配。当两者匹配时,我想通过向其添加一个数字来更改子数组中的第二个条目。如果查询中的 Id 与列表中的任何内容都不匹配,我希望将一个新的子数组推到数组的末尾,其值为 Id 和 points_description。

此外,如果它有帮助,我现在的程序确实找到了匹配项。唯一的问题是,它不会更新 2D 数组。

$array = array(array());
while ($row_description = mysqli_fetch_array($query_description)) {
    $check = 1;
    $is_match = 0;
    foreach ($array as $i) {    
        foreach ($i as $value) {  
            if ($check == 1) {
                if ($row_description['Id'] == $value) {
                    //$array[$i] += $points_description;
                    $is_match = 1;
                }
             }
            $check++;
            $check %= 2; //toggle between check and points
        }
    }
    if ($is_match == 0) {
        array_push($array, array($row_description['Id'], $points_description));
    }
}

我觉得我这样做太错了。我只想遍历我的 2D 数组并更改每秒的值。预期的输出应该是所有 Id 及其相应点值的打印输出我希望这足够有帮助。

示例:$row_description['Id'] = 2 且 $array = array(array(2,1(, array(5,1( , array(6,1((

输出应为 $array = 数组(数组(2,4(、数组(5,1( 、数组(6,1((

如果 $row_description['Id'] = 3 且 $array = array(array(2,1(, array(5,1( , array(6,1((

输出应为 $array = 数组(数组(2,4(、数组(5,1(、数组(6,1(、数组(3,3((

默认情况下,

当你在foreach中使用数组时,PHP会复制一个数组。为了防止 PHP 创建此副本,您需要使用 引用带有 &

的值

简单的例子:

<?php
$arrFoo = [1, 2, 3, 4, 5,];
$arrBar = [3, 6, 9,];

默认 PHP 行为:制作副本

foreach($arrFoo as $value_foo) {
    foreach($arrBar as $value_bar) {
        $value_foo *= $value_bar;
    }   
}

var_dump($arrFoo);
/* Output :
array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
}
*/

参考:不要创建副本:

foreach($arrFoo as &$value_foo) {
    foreach($arrBar as $value_bar) {
        $value_foo *= $value_bar;
    }   
}
var_dump($arrFoo);
/* Output :
array(5) {
  [0]=>
  int(162)
  [1]=>
  int(324)
  [2]=>
  int(486)
  [3]=>
  int(648)
  [4]=>
  &int(810)
}
*/