这是我第一次在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数组并改变每一个值。预期输出应该是所有Ids及其对应点值的打印输出 我希望这很有用。
示例:$ row_description ['Id'] = 2且$ array = array(array(2,1),array(5,1),array(6,1))
输出应为$ array = array(array(2, 4 ),array(5,1),array(6,1))
如果$ row_description ['Id'] = 3且$ array = array(array(2,1),array(5,1),array(6,1))
输出应为$ array = array(array(2,4),array(5,1),array(6,1), array(3,3))
答案 0 :(得分:0)
默认情况下,PHP会在foreach中使用它时复制数组。
要阻止PHP创建此副本,您需要使用&
简单示例:
<?php
$arrFoo = [1, 2, 3, 4, 5,];
$arrBar = [3, 6, 9,];
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)
}
*/