<!DOCTYPE html>
<html>
<body>
<?php
$array_task=array();
fillArray($array_task);
function fillArray($array){
$array1=array();
$array2=array();
for ($i=0;$i<8;$i++){
$array1[$i]=$i+1;
$array2[$i]=rand(0,100);
}
$array=array_combine($array1,$array2);
echo"Array before any editions <br>";
print_r($array);
echo"<br>Array after adding sum and multiplication <br>";
addSumMulti($array);
print_r($array);
echo"<br>Array after adding last element after each array element <br>";
#addAfterEach($array);
}
function addSumMulti($array){
$sum=0;
$multiplication=1;
for ($i=1;$i<=10;$i++){
$sum+=$array[$i];
if ($i==3 || $i==4){
$multiplication*=$array[$i];
}
}
$array[9]=$sum;
$array[10]=$multiplication;
print_r($array);
echo "<br>";
}
?>
</body>
</html>
首先 print_r ($array) 显示 8 个元素,然后在下一个函数中我添加了 2 个元素。而函数 addSumMulti 中的 print_r 显示了 10 个元素,而 fillArray 中的函数 addSumMulti 之后的 print_r 只显示了 8 个元素。出了什么问题,我应该更改什么才能在 addSumMulti(21 行)之后在 print_r 中看到 10 个元素?
答案 0 :(得分:0)
由于变量范围,您的 $array 尚未更新。
在 fillArray() 中声明的 $array 不能在另一个函数中引用。这样做应该是全局变量。
要么修改函数 addSumMulti 以返回一个数组并在 fillArray 中使用它,要么将 $array 作为全局变量。
选项 1:
function fillArray($array){
.....
$arrayAfterSum = addSumMulti($array);
.....
}
function addSumMulti($array){
.....
.....
return $array;
}
选项 2:
$array = array(); // its a gloabal variable
function fillArray($array){
global $array; // in order to access global inside function
.....
.....
}
function addSumMulti($array){
global $array; // in order to access global inside function
.....
.....
}
答案 1 :(得分:0)
在 PHP 中普通变量是按值传递的*。因此,当您将数组传递给函数时,会创建一个新副本,您的函数代码将对其进行操作。您的函数不返回任何值,因此数组的新值丢失,调用代码只能看到数组的原始副本。
有两种方法可以对原始数组进行更改:
function addLine($arr) {
$arr[] = "Additional Line";
return $arr
}
$arr = ["First line"];
$arr = addLine($arr);
function addLine(&$arr) {
$arr[] = "Additional Line";
return $arr
}
$arr = ["First line"];
addLine($arr);
见Variable scope和Passing By Reference
*对象总是通过引用传递