我在这里有一个关于更改函数内数组值的基本问题,假设我在类中有以下数组:
$my_array = array(1, 2, 3);
然后我有以下方法返回我的数组;
public function getAnArray()
{
return $this->my_array;
}
然后我想像这样改变一个 my_array 的值(例如2到7)(基于一些业务逻辑):
public function changeArray($my_array)
{
$new_value = 7;
foreach($my_array as $key => $value){
if($value == 2){
$my_array[$key] = $new_value; // Change the value of 2 to 7
}
}
}
现在 $ my_array 变为(1,7,3)
我知道我必须通过引用传递一些内容才能使用,但我不确切知道它应该如何工作。
答案 0 :(得分:1)
也许这就是你想要做的事情:
class Foo {
protected $my_array = array(1, 2, 3);
public function getAnArray() {
return $this->my_array;
}
public function changeArray($new_value,$where_current_value) {
foreach($this->my_array as $key => $value){
if($value == $where_current_value){
$this->my_array[$key] = $new_value; // Change the value of 2 to 7
}
}
}
}
$a = new Foo();
var_dump($a->getAnArray());
$a->changeArray(7,2);
var_dump($a->getAnArray());
结果应符合要求:
array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } array(3) { [0]=> int(1) [1]=> int(7) [2]=> int(3) }
PHP中的数组基本上总是通过引用访问,这就是你必须手动创建数组的真实副本的原因。
答案 1 :(得分:1)
如果您希望通过引用传递并更新此处所在类中的数组,则代码应如下所示:
foreach($my_array as &$element) {
if($element == 2) {
$element = 7;
}
}
这将根据要求修改原始数组的内容。
虽然看起来你正在课堂上访问它。如果$this->my_array
在此类中保持不变,则无需将$my_array
传递给changeArray( .. )
方法。像这样离开你的班级;
class Foo {
public $my_array = [1, 2, 3];
public function getAnArray() {
return $this->my_array;
}
public function changeArray($find, $replace) {
foreach($this->my_array as &$obj){
if($obj == $find){
$obj = $replace; // Change the value of 2 to 7
}
}
}
}
$x = new Foo();
print_r($x->getAnArray());
$x->changeArray(2, 7);
print_r($x->getAnArray());
作为一个粗略的例子